过去几天我一直在阅读很多有关Ruby的文章。每遇到一个我遇到的SO帖子,我都会听说Ruby是一种优雅的语言。你们可以举一个例子,说明为什么红宝石比另一种语言更优雅?Ruby是一种优雅的语言吗?
回答
它被认为高雅的,因为它是正交。这种说法类似的操作适用于类似的操作数。
简单示例:+
整数加起来;在浮点数上,同上。大整数也是。在字符串上,它将它们连接起来(这也是你期望的)。现在这对于+
并不是什么大事,你可以从任何体面的编程语言中期待它。但有些操作像map
或filter
,他们在列表上工作(他们应该!),但他们也在数组上工作,事实上在任何可以枚举或迭代的东西上工作。
我喜欢数组(或列表)索引的工作方式,可以使用正整数索引从开始索引,也可以使用负索引指定从结构尾部返回的位置,您可以指定一个范围来取出一个子集...这适用于列表,数组和(子)字符串。它在作业的右侧工作(=
),它也在左侧工作(您可以分配给子字符串,从而替换部分字符串)。所以你不需要substring_replace
函数,你只是利用现有的一般概念。
Ruby的作者在满足用户的期望时表达了这一点:应该有尽可能少的惊喜,只要常识会导致你期望某件事以某种方式工作,它只是简单的应该。他非常努力地满足这个要求。另外,虽然Ruby从Perl中借鉴了一点点,但作者不同意Perl支持Python的Zen的原理:“应该有一个–,最好只有一个明显的方法来做到这一点。”
Ruby不会闭包(=代码块),所以你可以简单地通过将它包装在一对大括号中来指定一个函数。有些地方适合用inline指定一个函数,而Ruby可以让你方便地执行。
Ruby允许你用少量的编码来做事情,因为它的构造以强大的方式组合在一起。我涉足Project Euler,我发现通常最短的解决方案是在Ruby中完成的易读易懂的解决方案。最短的是J,但这是APL方言,对于外行来说,它看起来像线路噪音。我个人的经历证明了这一点:我自学Ruby和Rails,并在一周内编写了一个中等复杂数据分析的Web应用程序。我学到的每一个原则,我可以用不同的数据在不同的地方申请– It Just Works ™!
免责声明:我在上面的答案中可能会模糊细节,因为我目前没有积极使用Ruby。如果我有什么问题,请告诉我,我会解决的。几年前,我喜欢红宝石的优雅,但因为参考实现过于缓慢而关闭了。与此同时,JRuby的速度与Java一样快,我会为下一个项目考虑这一点。 – 2009-11-28 12:16:20
计算环境中的正交表示没有副作用,因此,例如,修改一个组件不会影响相关组件。 – 2009-11-28 12:18:05
维基百科:“如果任何指令可以在任何寻址模式下使用任何寄存器,则指令集被认为是正交的。” - 这就是我正在讨论的内涵。我同意这不是完全明确的,这就是为什么我必须跟进很多挥手的话语。 – 2009-11-28 12:27:17
寄托都是一个对象(PS等在Smalltalk ..):
3.times { p "olleh" }
可扩展的/打开的类(例如,从滑轨):
10.days_ago
..更加上红宝石优雅:http://www.benhughes.name/files/presentations/ruby_elegance.pdf
- 有公开课即他们定义
- 有的method_missing即办案那里你发送消息的可能性后,你可以添加方法的类还没有定义的方法对于。这又可以让你编写适应而不是崩溃的代码。
- 具有Smalltalk-like,一致的OO型号例如,你可以做1.class 1.times {}之类的事情。这使得很多DSL支持成为可能。
- 它块/密封件 - 使得它更容易编写灵活的代码
- 它不与静态类型每个变量的(即试图解决不属于重要的,如果问题浪费你的时间你做TDD)
- 您没有使用基于类的OO即它支持基于原型的面向对象编程
我可能不能认为它是优雅的,我认为,在一般优雅是由程序员的impl派生的ementation。不过,我可以争辩说,它很简洁,我认为这是很多人在说Ruby很优雅时真的感觉到的。很多时候,汇集在一起的代码很快就会变得优雅。您可以看到编程语言枪战的结果here。你会注意到Ruby 1.9在左侧被打平,这意味着它非常简洁。我敢打赌,任何人谈论一种优雅的语言都是在谈论一种左侧或接近的语言。 Haskell是我知道的唯一值得注意的例外之一,它需要花费很大的努力才能完成某些工作,但仍然感觉非常优雅。
如果你想专注于Code-used,你可以为自己的排名设置自己的参数 - http://shootout.alioth.debian.org/u32/fun.php?d=data&calc=calculate&xfullcpu=0&xmem=0&xloc= 1 binarytrees = 1&chameneosredux = 1&fannkuch = 1&FASTA = 1&knucleotide = 1&天壤之别= 1&流星= 0&nbody = 1&pidigits = 1&regexdna = 1&revcomp = 1&spectralnorm = 1&threadring = 0 – igouy 2009-12-01 16:01:17
在我的经验中,块是促使Ruby优雅的最大因素。有什么比写每个来遍历数组/哈希的/ etc更优雅......
arr = ["one", "two", "three"]
arr.each { |e|
puts e
}
但是我相信这是比这更多,Ruby语言的优雅也来自库。大多数图书馆一直使用独特的Ruby风格来表示函数名称,比如'each'用于迭代或使用'!'和'?'在破坏性/布尔返回函数的函数名的末尾,这是真正保持Ruby'优雅'的原因。
红宝石是所有关于生产力和编程的乐趣,但有几个原因,Ruby是优雅:
- 纯OOP:一切都是对象,所以你没有原始的区分和对象类型。
- 它支持Functional和Imperative编程范例:导致简洁和可读的代码。
- 它支持Principle of Least Surprise:它支持可读性。
- 它有关闭和块:这对于做Internal DSLs真的很酷。
- 它有一个强大的Metaprogramming API:它也授权编写内部DSL。
- 它非常擅长编写脚本任务:处理文本和XML文件以及处理与管理相关的事情(现在它已被系统管理员广泛使用)。
- 它有一个非常酷和支持性的社区:无论你的问题是什么,你都会找到支持和帮助。该社区支持现代和时尚编码技术,如TDD和BDD。
上述所有的总和是用Ruby,你可以有:
- 简洁的代码:相较于Java和C++,至少可以节省自己的代码输入的50%。
- Readablility。
因此具有可读和简洁的代码- >更少的代码编写- >更少的代码测试和维护- >生产力。
我不应该忘记提及Ruby背后的伟大支持社区。
只是一个有趣的一面注:this feels like php还是Ruby(来自今天早些时候),但第一个答案感觉就像优雅的Ruby。在PHP中,我最终写了像链接文章这样的愚蠢的长代码来做一些小事。部分原因是因为lambda基本上不存在。所以我不得不说,Ruby的lambda支持与map/reduce一起使得它对我来说很优雅。
- 1. Ruby是一种脚本语言还是一种解释型语言?
- 2. asp.net是一种编译语言吗?
- 3. PowerShell是一种强类型语言吗?
- 4. bash是一种编程语言吗?
- 5. R是一种编译语言吗?
- 6. Qt 4是一种编程语言吗?
- 7. 这是一种编程语言吗?
- 8. Groovy和Groovy ++是两种语言还是一种语言?
- 9. '言'是一种方法吗?
- 10. 在一种语言的语音到另一种语言
- 11. JavaScript是一种类型安全的语言吗?
- 12. Visual Basic(基于.NET Framework)是一种垂死的语言吗?
- 13. callstack是一种语言安全的数据结构吗? Quasar + Fortran?
- 14. 硒是一种特定的面向语言(如Java)吗?
- 15. PHP是一种可扩展的网页语言吗?
- 16. XML是一种面向网络的编程语言吗?
- 17. R是一种资源匮乏的语言吗?
- 18. 这是什么意思一种语言是LISP的一种方言?
- 19. 是否有一种语言具有这种简化的语法?
- 20. 如何用同一种语言实现一种语言比语言更快?
- 21. 将一种语言翻译成另一种语言?
- 22. PHP是一种Web技术还是一种脚本语言?
- 23. JavaScript是一种应用程序语言吗?
- 24. Javascript是一种通用语言?
- 25. ObjC是一种“运行时语言”?
- 26. AutoIt是一种编程语言?
- 27. MSXML:JavaScript并不是一种脚本语言
- 28. Cocoa接口的语言,优雅,开放源代码示例?
- 29. 这是一种上下文无关或语境敏感的语言吗?
- 30. 学习一种新的编程语言取决于现有的熟悉语言是否是一种坏习惯?
类似:http://stackoverflow.com/questions/1589841/what-does-it-mean-when-someone-says-that-perl-is-more-expressive-lanaguage – 2009-11-28 13:39:14