投递人 itwriter 发布于 2011-06-10 13:58 评论(18) 有1376人阅读  原文链接  [收藏]  « »

  文/Jinpu Hu

  粗略的看,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的口水,如果你觉得我的观点有问题,不用赞同便是。

5
3
找优秀程序员,就在博客园 分享到: 新浪微博 腾讯微博 搜狐微博
相关标签: Ruby Python
已经有 18 位园友对此新闻发表了看法。 发表评论

热门评论

  • lzyzizi 发表于 06-10 17:14
    len(array) 是为了支持函数式编程。
    “Python可以用lamba来实现,但可恶的是代码必须是one line”
    加个括号就换行。
    支持(2) 反对(1)
  • 沸腾 发表于 06-10 15:14
    各种语言之争。。。看着就累

    自己喜欢的一定要强加给别人才行么?
    支持(2) 反对(1)
  • Jeffrey Zhao 发表于 06-10 14:11
    最后句话看着就觉得弱……
    支持(1) 反对(2)
  • jjx 发表于 06-13 10:46
    对python理解不够,看到第三条就看不下去了,python也有meta class,另外,就看第二条也不对,list.__len__()就怎么不是面对对象了
    支持(1) 反对(0)
  • 慈眉善目的程序猿 发表于 06-11 13:17
    写得很好, 作者应该再接再厉继续写汉语优于Ruby之处
    支持(1) 反对(0)
  • ubunoon 发表于 06-10 23:37
    任何表达式,方法,函数都有一个返回值

    python没有么?也是有的,只是默认返回None而已!搞明白了再来说吧!
    支持(1) 反对(0)
  • 猫之良品 发表于 06-10 18:32
    @沸腾
    比较,可以让你更了解两者之间的优劣与那一种更适合自己,这不是一种竞争,有比较才有进步。
    支持(1) 反对(0)