我在平台上长时间缺席后开发了一个用Java开发的LoB应用程序(花了大约8年左右的时间在Fortran,C,一个微软的C++和后来的.Net).
Java,这种语言,与我记忆中的方式相比并没有太大变化.我喜欢它的优点,我可以解决它的弱点 - 平台已经发展并决定了无数不同的框架,这些框架似乎做了很多相同的事情是一个不同的故事; 但这可以等待另一天 - 总而言之,我对Java感到满意.然而,在过去的几周里,我迷上了Groovy,纯粹是出于自私的观点:但不仅仅是因为它使得针对JVM的开发变得更加简洁和有趣(并且,很好,"groovy")命题比Java(语言).
Groovy最令我印象深刻的是其固有的可维护性.我们所有人(我希望!)努力编写记录良好,易于理解的代码.但是,有时我们使用的语言会让我们失望.例如:2001年,我在C中编写了一个库,将EDIFACT EDI消息转换为ANSI X12消息.这不是一个特别复杂的过程,如果稍微涉及,我当时认为我已经正确记录了代码 - 我可能已经 - 但是大约六年后我重新访问项目(并且在适应C#之后)我找到了我自己迷失在如此多的C样板(mallocs,指针等等)中,经过三天深思熟虑的分析才终于明白我六年前做过的事情.
今天晚上我写了大约2000行Java(毕竟这是休息日!).我记得最好,因为我知道如何,但是,在那2000行Java中,很大一部分是Java样板.
这是我看到Groovy和其他动态语言获胜的地方 - 可维护性和后来的理解.Groovy让您专注于您的意图,而不会陷入特定于平台的实现; 这几乎是,但并不完全是自我记录.我认为这对我来说是一个巨大的好处,当我重新审视我当前的项目(我将在几年后将其移植到Groovy)以及我的继承者,他们将继承它并继续做好工作.
那么,有没有理由不使用Groovy?
Dav*_*Ray 26
我可以想到两个不使用Groovy(或Jython或JRuby)的原因:
这些都是大问题.在大多数应用程序中,性能可能不如人们想象的那么重要,静态类型检查是一个宗教问题.也就是说,所有这些语言的一个优点是它们能够与本机Java代码混合和匹配.最好的两个世界和所有这一切.
由于我不对您的业务负责,我说"去吧".
Dan*_*ark 13
如果你使用Groovy,你基本上丢弃了有关类型的有用信息.这使您的代码"groovy":简洁明了.
Bird b
Run Code Online (Sandbox Code Playgroud)
变
def b
Run Code Online (Sandbox Code Playgroud)
另外,你可以玩所有的元类内容和动态方法调用,这些都是Java中的折磨.
但是 - 是的,我已经广泛地尝试过IntelliJ,Netbeans和Eclipse--在Groovy中不可能进行严重的自动重构.这不是IntelliJ的错:类型信息不存在.开发人员会说,"但是如果你对每一个代码路径(hmmmm)进行单元测试,那么你就可以更轻松地进行重构." 但不要相信炒作:添加更多代码(单元测试)将增加大规模重构的安全性,但它们不会使工作更容易.现在你必须手动修复原始代码和单元测试.
因此,这意味着您不会在Groovy中经常进行重构,尤其是在项目成熟时.虽然您的代码简洁易读,但它不会像每天,每小时和每周自动重构的代码那样精彩.
当您意识到不再需要Java中的类所代表的概念时,您可以删除它.在Eclipse或Netbeans或其他任何东西中,您的项目层次结构就像圣诞树一样亮起,告诉您究竟是什么搞砸了这一变化.def thing告诉编译器(以及你的IDE)没有关于如何使用变量,方法是否存在等等.并且IDE只能做很多猜测.
最后,Java代码中充满了"样板文件",但经过多次重构后,它已被捏成最终形式.对我而言,这是为未来的程序员提供高质量,可读代码的唯一途径,包括那些未来的程序员在未来.
当您使用动态语言时,尤其是在大型代码库中,您丢失的最大问题之一就是能够使用IDE进行重新分解.现在的IDE无法解析允许动态地向对象添加代码的语言,以允许从Eclipse等处获得简单的重构方法,用于Java,C++等.
这不是"动态语言比静态更好"的情况.使用最适合你的东西.Groovy特别酷的一点是你可以在同一个项目中混合搭配Java和Groovy,它们都可以在VM上运行.是的,Scala是另一个例子.
| 归档时间: |
|
| 查看次数: |
3854 次 |
| 最近记录: |