35

在离开平台很久之后,我正在用 Java 开发一个 LoB 应用程序(在过去 8 年左右的时间里,我一直在 Fortran、C、C++ 和后来的 .Net 中根深蒂固)。

Java,这门语言,与我记忆中的相比并没有太大变化。我喜欢它的优势,我可以解决它的弱点——平台已经发展壮大,并且决定无数不同的框架似乎做同样的事情是另一回事;但这可以再等一天——总的来说,我对 Java 很满意。然而,在过去的几周里,我已经迷上了 Groovy,这纯粹是出于自私的观点:但不仅仅是因为它使针对 JVM 的开发变得更加简洁和有趣(而且,嗯,“groovy”)命题比Java(语言)。

Groovy 最让我印象深刻的是它固有的可维护性。我们都(我希望!)努力编写有据可查、易于理解的代码。然而,有时我们自己使用的语言会打败我们。一个例子:2001 年,我用 C 语言编写了一个库,用于将 EDIFACT EDI 消息转换为 ANSI X12 消息。这不是一个特别复杂的过程,如果稍微涉及的话,我当时认为我已经正确地记录了代码 - 我可能已经 - 但大约六年后,当我重新访问该项目时(并且在适应 C# 之后)我发现我自己迷失在如此多的 C 样板(malloc、指针等)中,以至于我花了三天的时间进行深思熟虑的分析,才终于明白了六年前我一直在做什么。

今天晚上我写了大约 2000 行 Java 代码(毕竟是休息日!)。我已经尽我所知记录了最好的文档,但是,在这 2000 行 Java 中,很大一部分是 Java 样板。

这就是我看到 Groovy 和其他动态语言通过可维护性和后来的理解而获胜的地方。Groovy 让您专注于您的意图,而不会陷入特定于平台的实现;它几乎是但不完全是自我记录。当我在几年后重新审视我当前的项目(我将尽快移植到 Groovy)时,我认为这对我来说是一个巨大的福音,对我的继任者来说,他们将继承它并继续做好工作。

那么,有什么理由不使用 Groovy 吗?

4

5 回答 5

26

我认为不使用 Groovy(或 Jython 或 JRuby)的原因有两个:

  • 如果你真的,真的需要性能
  • 如果你会错过静态类型检查

这两个都是大如果。在大多数应用程序中,性能可能没有人们想象的那么重要,静态类型检查是一个宗教问题。也就是说,所有这些语言的优势之一是它们能够与本地 Java 代码混合和匹配。两全其美。

由于我不对您的业务负责,所以我说“去吧”。

于 2009-01-19T00:11:02.093 回答
13

如果您使用 Groovy,您基本上会丢弃有关类型的有用信息。这使您的代码“时髦”:简洁明了。

Bird b 

变成

def b

此外,您还可以使用所有的元类内容和动态方法调用,这在 Java 中是一种折磨。

但是——的,我已经广泛尝试过 IntelliJ、Netbeans 和 Eclipse——在 Groovy 中不可能进行严重的自动重构。这不是 IntelliJ 的错:类型信息不存在。开发人员会说,“但是如果您对每条代码路径都进行了单元测试 (hmmmm),那么您可以更轻松地进行重构。” 但不要相信炒作:添加更多代码(单元测试)会增加大规模重构的安全性,但它们不会使工作更容易。现在您必须手动修复原始代码单元测试。

所以这意味着您不会在 Groovy 中经常进行重构,尤其是在项目成熟时。虽然您的代码将简洁易读,但它不会像每天、每小时和每周自动重构的代码那样出色。

当您意识到不再需要由 Java 中的类表示的概念时,您可以将其删除。在 Eclipse 或 Netbeans 或其他任何东西中,您的项目层次结构就像一棵圣诞树一样亮起,准确地告诉您您在此更改中搞砸了什么。def thing不会告诉编译器(以及您的 IDE)如何使用变量、方法是否存在等。而且 IDE 只能做这么多的猜测。

最后,Java 代码充满了“样板”,但经过多次重构,它已被揉捏成最终形式。对我来说,这是为未来的程序员获得高质量、可读代码的唯一方法,包括那些未来的程序员是你未来的时候。

于 2010-05-09T21:26:12.850 回答
9

Scala可能成为 Groovy 的一个引人注目的替代品的两个原因:

  • 性能与 Java 相当
  • 没有杂乱的静态类型
于 2009-01-19T00:15:31.990 回答
7

当您使用动态语言时,尤其是在大型代码库中,您失去的最大的事情之一就是使用 IDE 进行重构的能力。允许向对象动态添加代码的语言根本无法被当今的 IDE 解析,从而允许您可以从 Eclipse 等中获得用于 Java、C++ 等的简单重构方法。

这并不是“动态语言比静态语言更好”的情况。使用最适合您的。特别是关于 Groovy 的真正酷的事情是您可以在同一个项目中混合和匹配 Java 和 Groovy,并且它们都在 VM 上运行。是的,Scala 是另一个例子。

于 2009-01-23T06:25:03.647 回答
2

我认为最大的问题是与 java 相比缺乏 IDE 支持,但是 Eclipse 和 Netbeans 的插件一直在变得更好。另外,如果我没记错的话,如果您出于某种原因确实需要匿名内部类,Groovy 不支持它们。不过,我个人会随时选择 Groovy。

于 2009-01-19T04:47:13.847 回答