我将给一支.NET (C#)开发团队做一系列讲座,主题是关于Ruby语言和环境。我会把这次机会看作是强调Ruby相对于C#的优势。首先,我想集中讨论语言本身,然后再进入环境(RoR vs ASP MVC等)。你会涉及哪些Ruby语言特性呢?
我将给一支.NET (C#)开发团队做一系列讲座,主题是关于Ruby语言和环境。我会把这次机会看作是强调Ruby相对于C#的优势。首先,我想集中讨论语言本身,然后再进入环境(RoR vs ASP MVC等)。你会涉及哪些Ruby语言特性呢?
我之前在一个.NET用户组做了一个关于IronRuby的演讲,遇到了类似的问题。我关注的重点是:
鸭子类型。没有什么比List<string> stringList = new List<string>()
更愚蠢的了;
表达简洁。例如省略括号、数组和哈希字面量等简单的东西(再加上鸭子类型,你可以得到更好的代码:string_list = []
)。所有这些小细节一起产生了很大的影响。
元编程。从简单的东西开始,比如attr_accessor
,然后再尝试一些高级的东西,如果他们并不立即看到好处的话。不要试图将事物与Lisp进行比较,并且反复强调 你不再需要不停地编写相同的糟糕的样板代码。保持简单明了。
作为一个很好的“结局”,向他们展示一些通常具有混乱的Assert.NotEqual<string> blah
的常规NUnit测试,然后说“这里是用Ruby编写的相同代码”,并展示使用rspec编写的代码(它的长度只有一半,阅读起来也容易10倍……如果这还不能说服他们的话,那就没有什么能说服他们了)。
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
我知道,应该避免像猴子一样打补丁,但我认为向新手介绍这个功能可以让他们了解 Ruby 背后的哲学。只要记得说:“孩子们,在家不要尝试这个!”