解析.NET程序員 Ruby核心語(yǔ)法入門_.Net教程
推薦:關(guān)于URL的傳遞字符串問(wèn)題的研究前幾天在調(diào)程序的時(shí)候遇到了比較郁悶的問(wèn)題,我用URL從一個(gè)頁(yè)面?zhèn)鬟f字符串到另一個(gè)頁(yè)面的時(shí),出現(xiàn)了個(gè)奇怪的問(wèn)題,我要傳遞的字符串是“DK51 700中繼站”;可是另一個(gè)頁(yè)面接收到
本文的目的是為了找出為什么.NET程序員都想學(xué)習(xí)并使用Ruby,并探索Ruby語(yǔ)言的核心語(yǔ)法。
微軟的IronRuby項(xiàng)目為Windows平臺(tái)帶來(lái)了強(qiáng)大的動(dòng)態(tài)語(yǔ)言,Ruby編程語(yǔ)言是一個(gè)現(xiàn)代的,面向?qū)ο蟮幕菊Z(yǔ)言,它的語(yǔ)法靈感來(lái)自Perl和Smalltalk語(yǔ)言,它是由一名日本人松本行弘(外號(hào)Matz)發(fā)明的,用他的話說(shuō),他是想發(fā)明一種語(yǔ)言比Perl更強(qiáng)大,同時(shí)比Python更面向?qū)ο蟮木幊陶Z(yǔ)言,在“http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html”有一篇對(duì)松本行弘專訪文章,大家可以去看看。于是Ruby被設(shè)計(jì)為非常貼近自然語(yǔ)言,作者的原意就是要減少編程時(shí)候的不必要的瑣碎時(shí)間,令編寫(xiě)程序的人高興,他于1996年發(fā)布了1.0版本。
這么多年來(lái),Ruby一直鮮為人知,但它的功能已經(jīng)遠(yuǎn)遠(yuǎn)超出了最初設(shè)計(jì)時(shí)的想法:以最簡(jiǎn)化的方法操作數(shù)據(jù)和環(huán)境。我第一次“玩”它還是在幾年前,那時(shí)我正在尋找一種替換處理自動(dòng)管理任務(wù)的批處理文件的方法。
Ruby真正開(kāi)始流行還得從一個(gè)來(lái)自伊利諾斯洲芝加哥市的名叫37signals小公司說(shuō)起,它們發(fā)布了一個(gè)名叫Rails的Web應(yīng)用程序框架,這個(gè)新的框架吸取了已經(jīng)被證明是可靠的Model-View-Controller和ActiveRecord模型的經(jīng)驗(yàn),并且添加了一些新的思想,如convention over configuration,導(dǎo)致它實(shí)現(xiàn)了太多的目標(biāo),幾乎不需要編碼了。
RubyCLR和IronRuby
在2006年早些時(shí)候,John Lam發(fā)布了一個(gè)開(kāi)源項(xiàng)目,叫做RubyCLR,它在Ruby和.NET之間起到一個(gè)橋梁的作用,它允許用戶可以直接從Ruby訪問(wèn).NET平臺(tái)豐富的資源,甚至將Ruby對(duì)象都暴露給CLR了,這個(gè)項(xiàng)目非常有雄心,但它沒(méi)有打算將Ruby向.NET靠攏,而是打算讓這兩個(gè)世界相互對(duì)話,你仍然需要在你的機(jī)器上按照Ruby運(yùn)行時(shí)環(huán)境。
RubyCLR項(xiàng)目為人們理解如何將Ruby和.NET和諧地溶合到一起邁出了關(guān)鍵的第一步,John的工作沒(méi)有引起人們的注意,2006年末,他在他的博客上宣布加入微軟新成立的動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)環(huán)境(DLR)團(tuán)隊(duì),在John宣布前幾個(gè)月,微軟發(fā)布了IronPython的1.0版本,它是Python語(yǔ)言在.NET框架上一個(gè)新的實(shí)現(xiàn),動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)環(huán)境在IronPython上工作,它在.NET框架構(gòu)建了一個(gè)運(yùn)行環(huán)境,允許動(dòng)態(tài)語(yǔ)言進(jìn)入.NET。
John和他的團(tuán)隊(duì)在2007年的MIX大會(huì)上宣布了IronRuby,可能真正讓人吃驚的是IronRuby項(xiàng)目本身是微軟的第一個(gè)真正意義上的開(kāi)源.NET語(yǔ)言,不僅可以得到源代碼,而且還可以獲取來(lái)自社區(qū)的貢獻(xiàn)。
IronRuby仍然處于發(fā)展階段,然而偶然也會(huì)刪掉已經(jīng)可以利用的東西,這些東西通常是其它項(xiàng)目的一部分,如最近發(fā)布的Silverlight 2.0 Beta 2,這些后續(xù)的項(xiàng)目也放在源代碼樹(shù)中了,并且也有相應(yīng)的郵件列表。
為什么要學(xué)習(xí)Ruby?
我最喜歡的一本書(shū)叫做《程序員實(shí)務(wù):從熟練工到大師》【英文名是《The Pragmatic Programmer: From Journeyman to Master》】,該書(shū)的作者鼓勵(lì)程序員每年學(xué)習(xí)一門新的編程語(yǔ)言,對(duì)于我而言,當(dāng)我學(xué)習(xí)了Ruby語(yǔ)言后,大大地改變了我的專業(yè)范圍。
Ruby是一門完全面向?qū)ο蟮恼Z(yǔ)言,這意味著在系統(tǒng)中每一樣打交道的東西都是對(duì)象,包括直接的值,如數(shù)字,即使是類,也是由新創(chuàng)建的對(duì)象實(shí)例組成的模板。
因?yàn)镽uby是一個(gè)動(dòng)態(tài)語(yǔ)言,你會(huì)發(fā)現(xiàn)類型已經(jīng)變得不太重要了,當(dāng)一個(gè)類函數(shù)以參數(shù)形式獲取到一個(gè)對(duì)象時(shí),不需要指定對(duì)象需要的類型。實(shí)際上,Ruby沒(méi)有編譯器,因此,可能直到傳遞給類函數(shù)的對(duì)象不滿足方法的需要時(shí),你才會(huì)發(fā)現(xiàn)這一點(diǎn)。
如果你象我?guī)啄昵澳菢樱阋苍S會(huì)發(fā)現(xiàn)這個(gè)概念讓你不安,如果沒(méi)有編譯器,那么你可能要盡可能最快地在運(yùn)行前就了解代碼中的錯(cuò)誤,而不用等到運(yùn)行時(shí)才知道。如果你還是習(xí)慣于讓編譯器告訴你錯(cuò)誤,那你就不用選擇Ruby了。
正是由于以前編譯器能夠報(bào)告錯(cuò)誤,如類型不匹配,當(dāng)你編寫(xiě)一個(gè)類函數(shù)時(shí),你可能希望“這里的對(duì)象必須能夠做到foo和bar”,然后創(chuàng)建一個(gè)接口叫做IFooBar,看起來(lái)這是一個(gè)不錯(cuò)的解決方案,但當(dāng)你想使用其它的在IfooBar之前創(chuàng)建的類時(shí)(特別是那些來(lái)自框架的類型),你就會(huì)失敗了。
作者提醒:IronRuby還沒(méi)有成為主流的工具,你可以使用Ruby的標(biāo)準(zhǔn)版本進(jìn)行學(xué)習(xí),如果你想實(shí)驗(yàn)后面的例子,可以從http://rubyinstaller.rubyforge.org/下載。
Ruby示例
學(xué)習(xí)Ruby或一門新的編程語(yǔ)言最好的方法就是多練習(xí),研究它的交互接口,大多數(shù)動(dòng)態(tài)語(yǔ)言都有交互提示符,稱之為讀-執(zhí)行-打印環(huán)(即REPL,Read-Execute-Print Loop),Ruby中的REPL程序叫做irb(即交互式Ruby,interactive Ruby)。
當(dāng)你執(zhí)行irb程序時(shí),你會(huì)看到一個(gè)irb提示符,如:
C:\Users\Brad> irb
irb(main):001:0>
當(dāng)你在irb提示符后敲入命令時(shí),Ruby解釋程序就會(huì)評(píng)估它們,并將結(jié)果輸出到你屏幕上,與irb類似的REPL是學(xué)習(xí)一門語(yǔ)言的優(yōu)秀方法:每次一條語(yǔ)句。
下面對(duì)irb做一個(gè)簡(jiǎn)單的介紹,在irb提示符后,敲入5 2,并回車,告訴Ruby計(jì)算這個(gè)表達(dá)式的值:
irb(main):001:0> 5 2
=> 7
irb(main):001:0>部分是irb的提示符,當(dāng)你敲入5 2并回車時(shí),irb就將結(jié)果輸出到屏幕上,如這里的=> 7,=> 是irb顯示輸出結(jié)果時(shí)使用的提示符。
如果Ruby認(rèn)為你還沒(méi)有完成表達(dá)式的書(shū)寫(xiě),它允許你繼續(xù)換行書(shū)寫(xiě),如當(dāng)你敲入5 2 時(shí)就按了回車,Ruby認(rèn)為你還有一部分沒(méi)有輸入完畢,它會(huì)繼續(xù)讓你在下一行輸入,如:
irb(main):002:0> 5 2
irb(main):003:0* 13
=> 20
第二行的提示符變?yōu)樾翘?hào)(*)了,而不是“>”,這樣你就知道你在完成前面沒(méi)有完成的表達(dá)式。
分享:.NET Framework 3.5 SP1正式版微軟今天發(fā)布了.NET Framework 3.5第一個(gè)SP服務(wù)包的最終版.這是一個(gè)累積更新,包含很多基于.NET Framework 2.0、3.0和3.5不斷生成的新功能,此外還包括.NET Framework 2.0 SP2和.NET Framewo
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-解析.NET程序員 Ruby核心語(yǔ)法入門。