与C#相比,您会强调Ruby的哪些语言特性?

时间:2009-02-23 21:31:28

标签: c# ruby programming-languages

我正在就.NET语言和环境的.NET(C#)开发团队进行一系列的讨论。我认为这是一个强调Ruby优于C#的好处的机会。首先,我想在进入环境之前专注于语言本身(RoR vs ASP MVC等)。您将涵盖Ruby语言的哪些功能?

5 个答案:

答案 0 :(得分:10)

前一段时间我给一个.NET用户组发了一篇关于IronRuby的演讲,并遇到了类似的问题。我关注的是:

  • 鸭子打字。没有什么比List<string> stringList = new List<string>();

  • 更愚蠢
  • 富有表现力和简洁的语法。简单的事情,如遗漏括号,数组和散列文字等(结合鸭子打字,你得到string_list = [],这显然更好)。所有小事都在很大程度上加起来。

  • 元编程。从简单的事情开始,如attr_accessor,如果他们没有立即看到好处,可能会更先进一些。不要尝试将事情与lisp相比较,并对编写其他程序的程序进行比较......人们会认为你在抽烟。保持简单并锤回家的重点你不必继续编写相同的糟糕样板代码

  • 作为一个很好的“结局”,向他们展示一些正常的NUnit样式测试以及他们通常拥有的所有混乱的Assert.NotEqual<string> blah,然后说“这里是用ruby编写的相同代码”并向他们展示使用rspec编写(它将是一半的长度,10倍更容易阅读...如果不出售它们,什么都不会。)

答案 1 :(得分:5)

  

我正在接近它,以此作为突出Ruby相对于C#的好处的机会。

我不确定这是正确的做法。如果谈话的基调是,“Ruby很酷,因为你可以在其中做 x !”你会很快失去你的C#观众。他们会回答:“如果我们愿意,我们可以在C#中模拟 x ,但我们的设计中没有太多用于 x 的东西。”或许,“如果你认为你需要做 x 那么你做错了!”

他们不会理解Ruby如何在他们理解Ruby之前帮助他们。为什么不让他们解决一些玩具问题并向他们展示Ruby程序员如何解决它们?教他们Ruby方式。一周后,当他们看到他们遇到的问题时,他们中的一个会说,“好吧,我知道如何解决这个问题,但如果我使用Ruby,那将会更容易...... 。“

答案 2 :(得分:4)

鸭子打字!这在c#4.0中不是一个问题,但有时候我不得不复制整个代码块,因为两个相关的类(为了我的目的)相同的API没有共享基类。

另外,块。 C#有lambdas,但Ruby的语法更漂亮,它们在整个标准库中普遍使用。与惯用语c#相比,它们更像是习惯性Ruby的一部分,而且这些都是有用的东西。

修改
哈希文字值得一提。总的来说,我会强调你在Ruby中的简洁程度,以及它如何让你更好地表达意图,花更少的时间来让编译器满意

答案 3 :(得分:1)

混合ins和多重继承。

它在坏人手中是危险的,但对于正确封装事物非常有利,而不是必须继承许多你不一定需要的东西。

答案 4 :(得分:1)

除了其他人所说的,开放课程是Ruby的一个重要特性值得一提:(示例从Ruby From Other Languages 被盗)< / p>

class Fixnum
  def hours
    self * 3600 # number of seconds in an hour
  end
  alias hour hours
end

# 14 hours from 00:00 January 1st
# (aka when you finally wake up ;)
Time.mktime(2006, 01, 01) + 14.hours # => Sun Jan 01 14:00:00

我知道,patching like a monkey should be avoided,但我认为向新手强调这一功能应该让他们了解Ruby背后的哲学。只记得说:“孩子们,不要在家里试试这个!