Dan*_*Dan 11 java paradigms groovy dynamic-languages
在过去的几个月里,我一直在从Java转换到Groovy,我可以欣赏它带来的许多好处:更少的代码,闭包,构建器,MOP最终使Grails成为可能的框架,在编写测试时易于模拟等.
但是,我被同事"指责"我的代码并不够常规.也就是说,我仍然为我的参数和字段声明类型,倾向于使用继承和多态而不是鸭子打字等.在我看来,在这些情况下,它不仅是动态与静态,而且是动态与面向对象的范式.有点困境.在那些情况下,我仍然倾向于选择OO.我觉得OO范例在其基本前提中具有很大的价值,允许您将代码结构与特定的现实世界概念进行抽象和关联.
所以,以下是我需要帮助的特殊问题:
我应该为参数,字段等声明类型吗?
当简单方法做的时候,我应该将代码块声明为闭包吗?
我什么时候应该使用duck typing而不是多态动态调度.例如,在groovy我可以做动物."$ action"()或def动物; animal.action(),而不是Animal animal = new Dog(); animal.action().我可以在开放 - 封闭原则的上下文中首先看到问题,但是更喜欢OO样式多态的任何其他原因?
什么时候应该在groovy中使用接口(如果有的话)?
我确信还有一些其他类似的困境,我没记下来.我也认为这些问题不仅适用于groovy,也适用于任何其他动态语言.你有什么意见?
这并不总是一种流行的观点,但我认为代码越清晰明确越好.
我不喜欢让你猜测发生了什么的结构......
我在Ruby工作了一年,根本不喜欢它.我并不是说它没有擅长的地方,我只是说我真的很想让事情保持清洁和明确,并且不觉得Ruby把它作为一个目标.
我确实想到了一件事 - 你做的打字数量并不等于整体开发速度.确实,具有大量重复代码的复杂代码库使得开发速度非常慢,但是简单地减少您键入的内容而不消除重复是没有用的,并且键入更长,更清晰,更明确的代码通常会更快(在项目的长度)比用简洁,不太正式的语言编写的相同代码.
如果你不相信打字与开发速度无关,那么下次你发布项目时会计算代码行数并除以花费的人工日数(包括调试和测试).换句话说,每天输入多少代码.你会发现结果是一个非常小的数字 - 实际输入代码是任何软件项目的一小部分.
.1. 我应该为我的参数、字段等声明类型吗?
我倾向于在用作公共 API 一部分的类上声明类型,其他开发人员会经常使用这些类型,或者我需要 IntelliJ 提供一些额外的自动完成帮助。否则我会“定义”事物。
.2. 当简单方法可以时,我应该将代码块声明为闭包吗?
我使用方法,除非它是我计划作为变量传递的东西。尽管有“foo.&bar”方法解引用运算符,但大多数开发人员并不知道这一点,并且在遇到它时会感到困惑。当一小段代码显然保留在更大的方法中而不是出于描述目的放入它自己的方法中时,我也会使用闭包。
.3. 我什么时候应该使用鸭子类型而不是多态动态调度。例如,在groovy中我可以做animal."$action"()或defanimal; Animal.action() ,而不是 Animal Animal = new Dog(); 动物.action()。我可以在开闭原则的背景下看到第一个问题,但是还有其他原因更喜欢 OO 风格的多态性吗?
当我需要这种间接级别时,我只使用animal."$action"() 形式,因为方法名称根据代码执行路径而变化(最常见的是在繁重的元编程期间)。我使用 Animal Animal = new Dog(); 当我需要 IDE 帮助自动完成时,或者该级别的文档有助于代码清晰(并且不会因可能明显或受限的额外冗长而受到损害)时,我可以使用 Animal.action() 。
.4. 我什么时候应该使用 groovy 中的接口(如果有的话)?
我很少使用它们。我可以看到它们主要用作公共 API 调用的预期字段的文档,或者可能用作标记接口,以帮助从元编程的角度区分一组类和另一组类。它们在 groovy 中的用处远不如在 java 中有用。
归档时间: |
|
查看次数: |
392 次 |
最近记录: |