是什么让Ruby成为优雅语言?

Luk*_*101 12 ruby ruby-on-rails

过去几天我一直在阅读很多关于Ruby的内容.我遇到的所有SO帖子都听说ruby是一种优雅的语言.你们能举个例子说明为什么红宝石比另一种语言更优雅?

Car*_*icz 17

它被认为是优雅的,因为它是正交的.这是一种奇特的说法,类似的操作适用于类似的操作数.

简单的例子:+在整数上添加它们; 关于浮点数,同上.在大整数上也是如此.在字符串上,它连接它们(你也期望它).现在这不是什么大不了的事+,你可以期待它来自任何体面的编程语言.但是有些操作像map或者filter,它们在列表上工作(它们应该!)但是它们也可以在数组上工作,实际上可以在任何可以枚举或迭代的事物上工作.

我喜欢数组(或列表)索引如何工作,你可以使用正整数索引从开始索引,或者负索引从结构的末尾指定一个位置,你可以指定一个范围来拉出一个子集.这也适用于列表,数组和(子)字符串.它在赋值(=)的右侧工作,它也在左侧工作(你可以分配一个子串,从而替换一部分字符串).因此,您不需要substring_replace功能,只需利用现有的一般概念.

Ruby的作者在满足用户(即程序员)的期望方面表达了这一点:应尽可能少的意外,只要常识会让你期望某些东西以某种方式起作用,它应该是.他非常努力地满足这一要求.此外,虽然Ruby借用了Perl的一点点,但作者不同意Perl的TMTOWTDI原则,支持Python的Zen:"应该有一个 - 最好只有一个 - 显而易见的方法."

Ruby执行闭包(=代码块)也很好,因此您可以通过将其包装在一对大括号中来指定函数.有些地方适合指定内联函数,而Ruby可以让你方便地完成它.

Ruby允许您使用少量编码来执行操作,因为它的构造以强大的方式组合在一起.我涉足项目Euler,我发现通常最简单易懂且易于理解的解决方案都是在Ruby中完成的.最短的是在J,但这是一种APL方言,对于不熟悉的人来说,它看起来像是线路噪音.

我的个人经历证实了这一点:我自学了Ruby和Rails,并在一周内编写了一个带有中等复杂数据分析的Web应用程序.我学到的每一个原则,我都可以在不同的地方申请不同的数据 - It Just Works™!

  • 计算上下文中的正交意味着没有副作用,因此例如,修改一个组件不会影响依赖组件. (4认同)

Daf*_*ees 5

  • 开放类,即你可以在定义后为类添加方法
  • method_missing,即处理你没有定义方法的消息的情况的可能性.同样,这允许您编写适应而不仅仅是崩溃的代码.
  • 拥有类似Smalltalk,一致的OO模型,例如你可以做1.class 1.times {}之类的事情.这使得很多DSL支持成为可能.
  • 它有块/闭包 - 使编写灵活的代码变得更容易
  • 不会浪费你的时间与每个变量的静态类型(即尝试解决如果你做TDD不重要的问题)
  • 您不必使用基于类的OO,即它支持基于原型的OO编程


Jam*_*mie 5

根据我的经验,块是使Ruby优雅的最大因素.什么比写每个迭代数组/散列/等更优雅...

arr = ["one", "two", "three"]
arr.each { |e|
    puts e
}
Run Code Online (Sandbox Code Playgroud)

但是我相信它不仅仅是这个,Ruby语言的优雅也来自于库.大多数库都一直使用独特的Ruby'style'作为函数名,例如'each'用于迭代或使用'!' 和'?' 在破坏性/布尔返回函数的函数名称末尾,这就是真正保持Ruby'优雅'的原因.