2009-02-23 20 views
7

我正在就Ruby語言和環境向.NET(C#)開發團隊進行一系列演講。我將它作爲一個機會來強調Ruby比C#更多的好處。起初,我想在進入環境之前專注於語言本身(RoR vs ASP MVC等)。你會介紹哪些Ruby語言的特性?與C#相比,Ruby會突出哪些語言特性?

+0

SO的文化是這樣的,我們不喜歡語言戰爭。 「Ruby on C#的好處」很容易讓一些人加入進來。我建議編輯少一點主觀性和議論性。 – 2009-02-23 22:30:48

+0

我不是想開始一場語言戰爭,但是我想得到各種答案,讓一種語言(紅寶石)與另一種語言(C#)不同。 – jsmorris 2009-02-24 21:54:01

回答

1

混合插入和多重繼承。

它在危險的手中是錯誤的,但對正確封裝事物相當有益,而不是必須繼承許多你不一定需要的東西。

+2

C#和ruby都沒有多重繼承... – 2009-02-23 22:18:11

5

鴨子打字!這在c#4.0中會少一些,但是有時候我不得不復制整個代碼塊,因爲兩個相關的類(用於我的目的)相同的API沒有共享一個基類。

另外,塊。 C#有lambda表達式,但是Ruby的語法更漂亮,並且在整個標準庫中被廣泛使用。他們更習慣於Ruby而不是慣用的c#,並且這很重要。

編輯
哈希文字也值得一提。總的來說,我會強調你在Ruby中的簡潔程度,以及它如何讓你更好地表達意圖,並花費更少的時間來讓編譯器感到高興。

+0

對於靜態鴨子打字而言,如在成員約束中 – MichaelGG 2009-02-23 23:26:26

+0

+1對於塊。這是Ruby的一個強大功能。 – 2009-02-24 14:53:59

11

前一段時間,我對一個.NET用戶組發表了一個演講。關於IronRuby,並面臨類似的問題。我關注的東西是:

  • 鴨子打字。沒有比List<string> stringList = new List<string>()更愚蠢的東西;

  • 表達式和簡明語法。簡單的事情,如捨棄括號,數組和哈希文字等(結合鴨子打字,你得到string_list = []這顯然更好)。所有小東西加起來都很大。

  • Metaprogramming。從attr_accessor這些簡單的東西開始,如果他們沒有立即看到好處,那麼可能會更先進一些。不要試圖比較一下在編寫其他程序的程序上嘲諷和打蠟......人們會認爲你正在吸菸。保持簡單和錘子那家你沒有保持寫入相同蹩腳的樣板代碼了

  • 當好「壓軸」的地步,讓他們與Assert.NotEqual<string> blah所有的爛攤子一些正常的NUnit的風格測試,他們通常會說,「這裏是用ruby編寫的相同代碼」,並向他們展示它使用rspec編寫的代碼(它的長度是一半,讀取容易10倍......如果不銷售它們,則不會)。

5

我接近它作爲一個機會在C#突出紅寶石的好處。

我不知道這是正確的做法。如果談話的語氣是「Ruby很酷,因爲你可以做x!」你很快就會失去你的C#觀衆。他們會回答:「如果我們想要,我們可以在C#中模擬x,但在我們的設計中,我們沒有太多的使用x。」或者,「如果你認爲你需要做x那麼你做錯了!」

他們不理解Ruby如何幫助他們,直到他們理解Ruby。爲什麼不讓他們通過一些玩具問題並向他們展示Ruby程序員如何解決它們?教他們紅寶石的方式。一週後,當他們看到他們遇到的問題時,他們中的一個會說:「好吧,我知道如何解決這個問題,但是如果我使用Ruby,它會變得更容易... 」

1

除了別人都紛紛表示,開放類是紅寶石的一個重要功能,值得一提的:(例如,從Ruby From Other Languages被盜)

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背後的哲學。只記得說:「孩子們,不要在家裏試試!