动态语言正在兴起,其中有很多:例如: Ruby,Groovy,Jython,Scala(静态,但具有动态语言的外观和感觉)等。 我的背景是Java SE和EE编程,我希望将我的知识扩展到其中一种动态语言中,以便为将来做好更充分的准备。
但是我应该关注哪种动态语言学习?为什么?在不久的将来,哪些是首选语言?
答案 0 :(得分:16)
学习Ruby或Python(以及Scala在较小程度上)意味着您将拥有非常可转移的技能 - 您可以使用Java版本,本机版本或.NET版本(IronRuby / IronPython)。 Groovy很好但是特定于JVM。
除非你设想特定的场景,否则“为未来做好准备”是很棘手的。你想做什么样的事情?您是否有一个可以用动态语言实现的项目?它是否小到可以尝试其中几个,以了解它们的差异?
答案 1 :(得分:10)
Scala根本不是一种动态语言。类型推断并不意味着它的无类型。然而,它是一种非常好的语言,具有很好的OOP和函数式编程混合。唯一的问题是你在路上遇到的一些陷阱。
由于您已经是一名经验丰富的Java程序员,因此它非常适合您的技能组合。现在,如果你想要一路动态,Ruby或Python都是很棒的语言。需要这两种语言。
答案 2 :(得分:8)
我个人推荐Clojure。 Clojure是一种令人敬畏的新语言,它比我见过的任何东西都更快受欢迎。 Clojure是一个在JVM上实现的功能强大,简单,快速的Lisp。它当然可以访问所有Java库,就像Scala一样。它已经有一本关于它的书,它已经成熟到版本1.0,它有三个IDE插件正在开发中,所有三个都非常实用。
答案 3 :(得分:5)
我会看看Scala。为什么?
我的(完全主观的)观点是Scala似乎得到了Groovy一两年前得到的很多关注。我不是试图在这里引起争议,或者建议使它成为一种更好的语言,但它似乎是新的JVM语言 de jour 。
另外,some dynamic attributes的语言是Microsoft的F#。我目前正在考虑这个问题(忽略了我自己的建议,重点是上面的第1点和第2点!)。它是一种基于.Net的对象的功能语言,目前正引起很多关注。
答案 4 :(得分:4)
在游戏行业Lua中,如果你是一名基于Adobe的设计师Lua也不错,如果你是一名嵌入式程序员,Lua几乎是唯一的轻量级解决方案,但如果你正在研究Web开发和常规工具脚本Python将更实用
答案 5 :(得分:4)
我发现Groovy是从广泛的Java背景中相对容易的跳转 - 它是一种更方便的Java版本。如果你需要做这样的事情,它也可以很好地与现有的Java代码集成。
答案 6 :(得分:3)
我推荐Python。它有一个庞大的社区,并有一个成熟的实施(以及几个有希望的不那么成熟 - 只是那些)。与新语言相比,Perl在我看来失去了很多牵引力,可能是因为它“非直观性”(不,不要让我开始)。
当您在Python中完成一两个项目时,请继续阅读其他内容以获得更广泛的视角。如果你用两种不同的动态语言完成了一些非平凡的事情,你就不会有任何同化任何其他语言的问题。
答案 7 :(得分:1)
JScript非常有用,它当然是一种动态语言......
答案 8 :(得分:1)
答案 9 :(得分:1)
记住你的背景,我会推荐一种语义与你所知道的相似的语言。因此,像Scala,Fan,Groovy这样的语言将是一个很好的起点。一旦你掌握了使用函数式语言的基本语义(以及开始喜欢它),你就可以转向像Ruby这样的语言。以这种方式缩短你的时间,以及你可以成为一个多语言程序员的事实。
答案 10 :(得分:0)
我会为Groovy(和Grails)投票+1。您可以使用Java样式或Groovy进行打字(您也可以将两者混合使用,不必担心)。您也可以使用Java库。
答案 11 :(得分:-1)
作为一般规则,请避免使用动态类型语言。编译时间检查的丢失和强大的静态类型的自我记录性质非常值得将类型信息放入源代码中。如果在编写代码时需要进行额外的输入,那么使用类型推断(Scala,Haskell)的语言可能会引起人们的兴趣。
拥有类型信息使代码更具可读性,可读性应该是编码中的第一标准。一个人阅读代码是昂贵的,任何阻碍读者清楚,准确理解的东西都是坏事。在OO语言中,它更糟糕,因为你总是在制作新类型。刚刚熟悉的读者会挣扎,因为他们不知道传递和修改的类型。例如,在Groovy中,以下内容是合法的def accountHistoryReport(in, out)
阅读,我不知道in
和out
是什么。当您查看20种不同的报告方法时,您可以快速完成homicidal.
如果你真的认为你必须进行非静态输入,那么像Clojure这样的语言是一个很好的折衷方案。类似Lisp的语言建立在一小组关键抽象上,并且每个抽象都具有大量的功能。所以在Clojure中,我将创建一个具有my对象属性的map(hash)。它有点简化,但我不需要查看整个代码库来实现一些未命名的类。
我的经验法则是我用动态语言编写脚本,用编译的静态类型语言编写系统。