在Groovy中显式输入:有时还是从不?

Dan*_*ark 20 ruby java groovy

[后来:仍然无法弄清楚Groovy是否有静态类型(似乎没有)或者使用显式类型生成的字节码是否不同(似乎是).无论如何,关于这个问题]

Groovy和其他动态语言(或至少是Ruby)之间的主要区别之一就是你可以 静态 在需要时显式键入变量.

那就是说,什么时候应该在Groovy中使用静态类型?以下是我能想到的一些可能的答案:

  1. 只有在出现性能问题时才会出现问题.静态类型变量在Groovy中更快.(或者他们是关于此链接的一些问题)
  2. 在类的公共接口(方法,字段)上,您可以获得自动完成功能.这可能/真/完全错了吗?
  3. 从来没有,它只是混乱了代码并且破坏了使用Groovy的目的.
  4. 是的,您的类将被继承或使用

我不只是对你的工作感兴趣,更重要的是你在Groovy编码的项目中看到的.什么是常态?

注意:如果这个问题有些不对或错过某些类别的静态动态,请告诉我,我会解决它.

Dón*_*nal 16

根据我的经验,没有规范.有些使用类型很多,有些从不使用它们.就个人而言,我总是尝试在我的方法签名中使用类型(对于params和返回值).例如,我总是写一个像这样的方法

Boolean doLogin(User user) {
// implementation omitted
}
Run Code Online (Sandbox Code Playgroud)

即使我可以像这样写

def doLogin(user) {
// implementation omitted
}
Run Code Online (Sandbox Code Playgroud)

我这样做是出于以下原因:

  1. 文档:其他开发人员(和我自己)知道该方法将提供和返回的类型,而无需阅读实现
  2. 类型安全:虽然在Groovy中没有编译时检查,如果我doLogin使用非User参数调用静态类型版本,它将立即失败,因此问题可能很容易修复.如果我调用动态类型的版本,它将调用方法失败一段时间,并且失败的原因可能不会立即显而易见.
  3. 代码完成:使用良好的IDE(即的IntelliJ)时,因为它甚至可以提供用于动态地添加的方法,如域类动态查找完成,这是特别有用的

出于同样的原因,我也在我的方法的实现中使用了相当多的类型.事实上,我不使用类型的唯一时间是:

  1. 我真的想支持各种类型.例如,将字符串转换为数字的方法也可以将字符串的集合或数组转换为数字
  2. 懒惰!如果变量的范围非常短,我已经知道我想调用哪些方法,并且我还没有导入类,那么声明类型似乎比它的值更麻烦.

BTW,我不会把太多的信心在您连声称类型Groovy是不是类型化的Groovy快得多该博客文章.我以前从未听过,我没有发现证据非常有说服力.