我已经是一名Java开发人员多年了。最近,Groovy引起了相当大的轰动。我看了一下,觉得很有趣,但我没有看到任何内在的“哇因素”;也就是说,我没有看到开始使用它的内在价值。
现在,我非常确定我只是看不到整体的优势。所以,我向SO社区提问:学习Groovy对于任何Java开发人员有什么好处?它有什么特点/功能等等,比纯粹的Java做得更好吗?
软件世界中的事情不会无缘无故地迅速流行。我相信Groovy具有各种巧妙的小(和大)功能,使它成为必学的语言;我只是“没看懂”。提前感谢。
我已经是一名Java开发人员多年了。最近,Groovy引起了相当大的轰动。我看了一下,觉得很有趣,但我没有看到任何内在的“哇因素”;也就是说,我没有看到开始使用它的内在价值。
现在,我非常确定我只是看不到整体的优势。所以,我向SO社区提问:学习Groovy对于任何Java开发人员有什么好处?它有什么特点/功能等等,比纯粹的Java做得更好吗?
软件世界中的事情不会无缘无故地迅速流行。我相信Groovy具有各种巧妙的小(和大)功能,使它成为必学的语言;我只是“没看懂”。提前感谢。
我认为,Groovy相对于Java的一些最大优势包括:
terser code thanks to overloaded operators and simplified property access. Instead of writing
if (obj1.getBar().equals(obj2.getBaz())) {
obj3.setFoo("equal");
}
you can write
if (obj1.bar == obj2.baz) {
obj3.foo = "equal"
}
我认为这种方式更易读。
inline notation for Maps and Lists. Instead of
Map attributes = new HashMap();
attributes.put("color", "red");
attributes.put("width", 1);
你可以编写
def attributes = [color: "red", width: 1]
useful extensions to standard libraries. For example, you can read files and webpages like this:
def fileContents = new File('readme.txt').text
def pageContents = new URL('readme.txt').text
syntactic sugar for initializing properties - for example,
MyClass myObject = new MyClass();
myObject.setFoo("bar");
myObject.setBaz(23);
可以被替换为
def myObject = new MyClass(foo: "bar", baz: 23)
'safe'引用 - if (str != null) {return str.toUppercase();} else {return null;}
变成 return str?.toUppercase()
正则表达式更加美观
由于过于苛刻的反应而进行的更新:
设计错误:我想再补充一点,因为我没有看到它被明确提到。
对我来说,简洁性本身很好,但这不是重点。
无论你写什么代码,Java 看起来总是像 Java,它永远不会读起来像你要解决的问题——它会读起来像 Java,解决你的问题。
我想要相反的效果:我希望我的代码读起来像我正在解决的问题,用 [插入语言] 写成。
Groovy 比 Java 更具表现力、更具可塑性。它可以看起来像我想做的事情。其中一个经典例子就是内部 DSL。我经常使用的一个是 easyb,它只是 Groovy 代码,但在我大声朗读时听起来像我正在做的事情。还有很多其他例子,但 easyb 很容易推销。
还没有提到的 AST 转换也允许进行很酷的编译时技巧。你可以在 Java 中使用类似 AspectJ 的东西玩类似的游戏,但它不是“内置”的。像 @Delegate、@Singleton 等东西非常方便。
对我来说,一种语言需要是可塑的、可变形的、灵活的:Java 不是。Java 具有贫乏的抽象模型,使得使用它非常令人沮丧——在整个语言中,无论是小规模还是大规模的额外工作量都让人难以置信。