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

时间:2009-11-28 10:50:54

标签: ruby-on-rails ruby

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

8 个答案:

答案 0 :(得分:17)

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

简单示例:整数上的+添加它们;关于浮点数,同上。在大整数上也是如此。在字符串上,它连接它们(你也期望它)。现在这对于+来说并不是什么大不了的事,你可以从任何体面的编程语言中得到它。但是有像mapfilter这样的操作,它们在列表上工作(它们应该!)但是它们也可以在数组上工作,实际上可以在任何可以枚举或迭代的事物上工作。

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

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

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

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

根据我的经验,积木是使Ruby变得优雅的最大因素。什么比写每个迭代数组/哈希/等更优雅...

arr = ["one", "two", "three"]
arr.each { |e|
    puts e
}

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

答案 3 :(得分:4)

Ruby和DSL已经discussed a lot

来自sinatra的示例:

get '/' do
    'Hello world!'
end

或者来自blog

ChessGame.new do |move|
  move.black_pawn(forward)
  move.white_pawn(forward)
  #…
  move.white_queen(pwn_king)
end

答案 4 :(得分:4)

Ruby完全关注生产力和编程乐趣,但是有几个原因可以解释为什么Ruby优雅:

  • 纯OOP:一切都是对象,所以你不必区分原始类型和对象类型。
  • 它支持功能和命令式编程范例:这导致简洁和可读的代码。
  • 它支持Principle of Least Surprise:支持可读性。
  • 它有闭包和块:这对于Internal DSLs非常酷。
  • 它具有强大的Metaprogramming API:它还可以编写内部DSL。
  • 它非常擅长编写脚本任务:处理文本和xml文件以及执行管理相关的东西(系统管理员现在已经广泛使用它了一天)。
  • 它有一个非常酷和支持的社区:无论你的问题是什么,你都会找到支持和帮助。此社区支持现代和时尚编码技术,例如TDDBDD

以上所有内容的总和是使用Ruby可以:

  • 简洁代码:与Java和C ++相比,至少可以节省50%的代码输入。
  • Readablility。

因此具有可读且简洁的代码 - &gt; 更少的代码来编写 - &gt; 更少的代码来测试和维护 - &gt; <强>生产率

我不应忘记提及Ruby背后的支持性社区。

答案 5 :(得分:2)

我可能无法证明它很优雅,我认为一般来说优雅是由程序员的实现得出的。不过我可以说它很简洁,我认为当他们说Ruby优雅时,很多人都会感受到这种感觉。通常快速汇总的代码会感觉很优雅。

您可以看到编程语言枪战here的结果。你会注意到Ruby 1.9在左侧是平坦的,这意味着它非常简洁。我敢打赌,任何谈论优雅语言的人都在谈论一种左侧或近侧的语言。 Haskell是我所知道的唯一值得注意的例外之一,它需要付出很多努力来完成某些事情,但仍然感觉非常优雅。

答案 6 :(得分:1)

everthing是一个对象(ps。就像在smalltalk中一样..):

3.times { p "olleh" }

可扩展/开放类(例如来自Rails):

10.days_ago

..更多关于红宝石的优雅http://www.benhughes.name/files/presentations/ruby_elegance.pdf

答案 7 :(得分:0)

只是一个有趣的旁注:this feels like php还是Ruby(从今天早些时候开始),但第一个答案感觉就像优雅的Ruby。在PHP中,我最终编写了像链接帖子这样的愚蠢的长代码来做一些小事情。部分原因是基本上不存在lambda。所以我不得不说Ruby的lambda支持与map / reduce一起使我优雅。