我从事Python程序员工作大约18个月,其中包括一次实习和一些附带项目,我认为自己对这种语言非常满意。
但是,在编程领域似乎对Ruby有很多关注,但对Python则不再关注。
因此,在学习Ruby时,是否会有Python风格的东西只是Ruby中的不良做法?我应该注意什么,应该避免什么?
我从事Python程序员工作大约18个月,其中包括一次实习和一些附带项目,我认为自己对这种语言非常满意。
但是,在编程领域似乎对Ruby有很多关注,但对Python则不再关注。
因此,在学习Ruby时,是否会有Python风格的东西只是Ruby中的不良做法?我应该注意什么,应该避免什么?
Answers:
我在2003-5年做Plone / Zope顾问时就使用Python。然后在2006年,我开始学习Ruby。我从来没有回头。我认为不同的人会更适应不同的编程语言和文化,但是对我来说,Ruby比Python感觉好很多。
我个人认为,与Ruby相比,Python是可靠的主力,碰巧也有些呆板和乏味。Ruby更有趣。这是一种外观漂亮的语言,可以做很多有趣而时髦的事情,令其从业者赞叹不已。我听说Python人士攻击Ruby太危险了,他说重新打开类并执行诸如此类的野蛮不负责任的工作太容易了。但这就是让Ruby对我来说就像是动作冒险喜剧爱情片的部分原因。相比之下,Python更像是宜家家具:令人愉悦,舒适和可靠-但它永远不会令您惊讶并喘不过气来。
在我看来,关于Ruby的两件最好的事情是使它与Python明显区别的两件事。首先,Ruby受Perl影响很大。Python似乎以成为反Perl感到自豪。但是Ruby从Perl借来的东西具有很大的实用价值。以正则表达式为例。在Ruby中,您可以自然地编写正则表达式,例如if mystring =~ /^\s+hello word!/ ...
。在Python中并不需要那么多,因为Python非常注重使所有内容遵循统一可预测的语法。在Ruby中,您可以使用立即获得STDIN input = STDIN.read
。在Python中,您必须import sys
然后然后
sys.stdin.read()
。这只是两个例子,其中Python努力使自己与Perl保持距离并如此可预测地规律化的努力被Ruby愿意在每种情况下做正确的事情所击败。
Ruby与Python区别的另一点是Ruby与Lisp更加接近,而Python几乎是一种命令式编程语言。我认为这对Ruby有利。
Ruby有许多类似Lisp的功能,使得用更少的代码(比使用Python)做更多的事情成为可能。例如,Ruby中的每个语句和控件结构都返回一个值:无需使用该return
语句就可以在Ruby中逃脱。甚至if
语句的值都是一个值,因此您可以编写如下内容
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
在Python中,您必须编写
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Python使您键入result =
两次。那不是很干(不要重复自己)。在许多这样的实例中,由于其类似Lisp的特性,Ruby将比Python更干燥。Ruby的创建者Matz来自Lisp背景。
有人说Ruby在元编程(又名动态编程)中也发挥了Python的作用。Python人士通过说元编程太危险,或者说从理论上说,您可以用不同的方式完成Ruby在Python中可以完成的元编程工作来回应。但是每个人都同意的一件事是,元编程在Python中远没有在Ruby中常见。那太糟糕了,因为元编程是一次旅行。
我认为在一天结束时Ruby和Python都可以完成工作,这可能是对的。与C和Java相比,Ruby和Python几乎是同一回事。它们是富有表现力,富有成效的高级语言。
所以归结为你的个性。
您是否希望事情是可预测的,定期的和安全的?您喜欢命令式编程风格吗?您是否想为Google工作?您认为Perl是混乱的地狱产物吗?坚持使用Python。
您是否很高兴找到绝对最简洁的方法来完成某些编程结果?您是否对规则性和统一性感到厌烦?您是否想自由地以自己的风格编写代码,并有足够的空间提出自己的绝妙技巧?您对Lisp的亲近感是否比对C的亲和力好?您是否对Perl对软件编程的划时代的贡献感到钦佩,但只希望它可以少一点神秘和丑陋?您是否像其他人对诗歌那样思考代码?试试Ruby。
result = "world" if output=="hello" else "there"
是完全有效的Python(短3个字符)。
一切都有一个利基。例如,Python(django)是GoogleApp Engine的一等公民,而Python是许多生物信息学项目的语言或选择。Python确实具有很大的市场价值(我之所以获得许多主动提供的工作机会,仅仅是因为我在Python上做了大量工作),但是Ruby也是如此-在不同的领域。毫无疑问,您已经在这里多次听到了,它将始终帮助您学习更多的语言,是的,学习Ruby。会复杂吗?它比学习COBOL复杂得多,因为可用的语言和框架彼此相似。一个例子是Ruby的gems和python的pip。
请记住,语言是工具,每种工具都是有目的的。您知道的工具越多,您可以更快,更轻松,更正确地构建树屋。
我应该学习红宝石吗?是。
学习一门新语言总是值得的(特别是如果它采用与您所熟悉的编程范例不同的编程范例),有时即使您使用其他语言编程也可以使您更加精通。例如,我学习了Lisp掌握的大多数功能编程,并在需要时将其应用于Python和Ruby。
会很难吗?如果您已经学习过Python,那么您当然也可以学习Ruby。
如果您现在正在寻找工作,它也很有用,它表明您对技术有好奇心,并且可以自己学习。
在c2.com上,Ruby和Python之间有很好的比较。