Ruby优于Python之处(面向hackers)
粗略的看,ruby和python非常的相似,都拥有不错的社区,大量的类库,都是动态语言。但如果要在之间做一个取舍?你会怎么看呢?
我说说我的看法:
哲学不一样
Python强调的是代码风格的统一,一件事情只有一种做法,从而似乎更加利于团队合作;而Ruby走了另一个极端,由于语言设计的非常优美,做一件事情可以有更多的选择,所谓条条大路通罗马。如果你问一个hacker,他一定会告诉你,他不喜欢被限制。至于团队协作的问题,那就看你的团队都是什么人组成的,如果都是一帮hacker,那自然会有一些协议,大家在这个协议的基础上工作,不同的模块间按照协议“通讯”便ok了。但如果你的团队比较“保守”,那就选择Python吧。如果我build一个新的团队,我就一定选择hacker。可以推荐大家去看一下黑客与画家。:)
对象系统更彻底
比如一个数组对象的长度,在Python里只能len(array),或者array.__len__()。而在Ruby里,一切皆对象,你可以array.size或者array.length。细节决定成败。
元编程支持更猛
你可以在任何时候,动态的修改任何Ruby的class,这得利于Ruby实现OO时构建的eigenclass(Ruby对象系统实在值得好好研究,可以参见我以前的一篇博客)。而这在Python里做起来是很困难的,甚至是不可能的。Python对于导入的class或者模块,只能以过程式的方式,进行XXX.new_method赋值,而Ruby可以和import前的写法一致,是声明式的。虽然Open class容易引入不可控的bug,但他也可以hacker更多的空间,更多对已有代码的控制,用得恰当可以使代码更加简短,更加可读。比如:10.years.ago ,这让hacker写起来很愉快!这更加适合做DSL。
匿名blocks发飙
Python可以用lamba来实现,但可恶的是代码必须是one line的,这典型没有考虑block的威力。而Ruby的每个方法都可以接受一个匿名block。那匿名block有什么威力?Javascript Ninja一定明白。对于非Javascript Ninja,简言之,可以直接使用block传递给一个方法,方法可以利用block产生域的变量,如果还无法想到好处,最直接的就是去学好Javascript。
任何表达式,方法,函数都有一个返回值
如果你熟悉Functional Programming,你就知道,任何元素都应该有一个返回值(比如if表达式也会以最后的结果作为返回值),结果往往由一系列的函数调用决定,一个函数的输入往往是另一个函数的输出。这点Python是做不到的。
更快和更注重实效的积累
rails3.1就快出来了,里面拥抱了jQuery,拥抱了sass coffeesrcript,还内置支持了http stream。这些在django等Python的web framework里没有得到及时的反应。而且rails生态系统里,rails的进化是社区推动的,一个新特性必然是更加合理的解决了目前web开发的问题,而非理论或个人英雄主义。取之于民,用之于民。
以上是我对这两门语言的一些简短的想法,将来有新的想法再加入。不想引来Pythoners的口水,如果你觉得我的观点有问题,可以文明的指出来,我会仔细思考你的观点!