Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与C#相比,您会强调Ruby的哪些语言特性?_C#_Ruby_Programming Languages - Fatal编程技术网

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

与C#相比,您会强调Ruby的哪些语言特性?,c#,ruby,programming-languages,C#,Ruby,Programming Languages,我正在给一个.NET(C#)开发团队做一系列关于Ruby语言和环境的演讲。我把它看作是一个强调Ruby优于C的优势的机会。首先,我想在进入环境(RoR vs ASP MVC,等等)之前集中讨论语言本身。您将介绍Ruby语言的哪些特性 混合插入和多重继承 这在错误的人手中是危险的,但对于正确封装东西是非常有益的,而不是必须继承很多你不一定需要的东西。!这在c#4.0中不是什么问题,但有时我不得不复制整个代码块,因为(出于我的目的)具有相同API的两个相关类没有共享一个基类 还有,积木。C#有lam

我正在给一个.NET(C#)开发团队做一系列关于Ruby语言和环境的演讲。我把它看作是一个强调Ruby优于C的优势的机会。首先,我想在进入环境(RoR vs ASP MVC,等等)之前集中讨论语言本身。您将介绍Ruby语言的哪些特性

混合插入和多重继承


这在错误的人手中是危险的,但对于正确封装东西是非常有益的,而不是必须继承很多你不一定需要的东西。

!这在c#4.0中不是什么问题,但有时我不得不复制整个代码块,因为(出于我的目的)具有相同API的两个相关类没有共享一个基类

还有,积木。C#有lambdas,但Ruby的语法更漂亮,在标准库中普遍使用。它们更像是惯用Ruby的一部分,而不是惯用c#,这很重要

编辑

散列文字也值得一提。总的来说,我要强调Ruby的简洁性,以及它如何使您能够更好地表达意图,并花更少的时间让编译器满意。我刚才在一个.NET用户组上做了一次关于IronRuby的演讲,遇到了类似的问题。我关注的是:


  • 鸭子打字。没有什么比List stringList=newlist()更愚蠢的了。

  • 表达简洁的语法。简单的事情,比如省略括号、数组和散列文本等(结合duck类型,您可以得到
    string\u list=[]
    ,这显然更好)。所有小事情加起来都很大

  • 元编程。从简单的事情开始,比如
    attr\u accessor
    ,然后如果他们没有立即看到好处,可能会做一些更高级的事情。不要试图将编写其他程序的程序与lisp和wax进行比较。。。人们会以为你在抽烟。保持简单,并强调您不必再继续编写同样糟糕的样板代码

  • 作为一个好的“结局”,向他们展示一些正常的NUnit风格的测试,以及他们通常所拥有的
    Assert.NotEqual blah
    ,然后说“这是用ruby编写的相同代码”,并向他们展示它是用rspec编写的(它的长度是原来的一半,阅读起来容易10倍……如果这样做不起作用,就什么都不会了)

我把它看作是一个强调Ruby优于C的优势的机会

我不确定这样做是否正确。如果你演讲的基调是“Ruby很酷,因为你可以在里面做x!”你会很快失去你的C#听众。他们会回答,“如果我们愿意,我们可以在C#中模拟x,但在我们的设计中x没有太多用处。”或者,“如果你认为你需要做x,那么你做错了!”


在他们理解Ruby之前,他们不会理解Ruby如何帮助他们。为什么不带他们经历一些玩具问题,向他们展示Ruby程序员将如何解决这些问题呢?教他们红宝石的方法。一周后,当他们看到自己遇到的问题时,其中一个会说,“天啊,我知道如何解决这个问题,但是如果我使用Ruby,它会变得简单得多……”

除了其他人都说过的,开放类是Ruby的一个重要特性,值得一提:(从中偷来的示例)


我知道,但我认为向新手强调这个特性应该让他们了解Ruby背后的理念。记住要说:“孩子们,不要在家里试这个!”

SO文化是这样的,我们不喜欢语言战争。“Ruby优于C#的好处”很容易让一些人感到振奋。我建议编辑要少一点主观和争议性。我不是想发动语言战争,但是我确实想得到各种各样的答案,说明是什么让一种语言(ruby)与另一种语言(C#)不同。没有什么比List stringList=new List()更愚蠢的了;我的意思是,绕过这一点就是推断,即(var x=newlist())。和+1表示更多的文字和元编程。当然类型推断很好,但它仍然局限于局部变量。我有很多类定义,其中包含List m_strings=new List(),看起来它们不会很快消失:-(^^^关键是,duck类型在ruby中随处可见。你不需要接口,等等,排除“Assert.NotEqual的混乱”,这取决于您正在使用的库,Jafar很好地解决了这个问题,这在某种程度上相当于C#的扩展方法(但在实现细节上可能有所不同)
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