Ruby是一種解釋型、面向對象、動態類型的語言。Ruby采取的策略是在靈活性和運行時安全之間尋找平衡點。隨著Rails框架的出現,Ruby也在2006年前后一鳴驚人,同時也指引人們重新找回編程樂趣。盡管從執行速度上說,Ruby談不上有多高效,但它卻能讓程序員的編程效率大幅提高。本文將講述Ruby語言的基礎語言特性,包括基本的語法及代碼塊和類的定義。
1. 基礎
在Ruby交互命令行中輸入以下命令(>>為命令行提示符,=>為返回值;下文將把=>符號和語句寫在一行內表明其返回值):
>> puts 'hello, world'hello, world=> nil>> language = 'Ruby'=> "Ruby">> puts "hello, #{language}"hello, Ruby=> nil
以上代碼使用puts輸出,給變量賦值,并用#{}的語法實現字符串替換。這表明Ruby是解釋執行的;變量無需聲明即可直接初始化和賦值;每條Ruby代碼都會返回某個值;單引號包含的字符串表示它將直接被解釋,雙引號包含的字符串會引發字符串替換。
1.1 編程模型
Ruby是一門純面向對象語言,在Ruby中一切皆為對象,可以用“.”調用對象具有的方法,可以通過class和methods方法查看對象的類型及支持的方法,如4.class => Fixnum,7.methods => ["inspect", "%", "<<", "numerator", ...],false.class => FalseClass(方括號表示數組)。
1.2 流程控制
條件判斷有正常的塊形式,也有簡單明了的單行形式;除了常見的if語句外,還有unless語句(等價于if not,但可讀性更強)。同理,循環也有正常的塊形式和單行形式。注意:除了nil和false之外,其他值都代表true,包括0!
# 塊形式if x == 4 puts 'This is 4.'end# 單行形式puts 'This is false.' unless truex = x + 1 while x < 10 # x的結果為10x = x - 1 until x == 1 # x的結果為1
和其他C家族的語言差不多,Ruby的邏輯運算符and(&&)、or(||)都自帶短路功能,若想執行整個表達式,可以用&或|
1.3 鴨子類型
執行4 + 'four'會出現TypeError的錯誤,說明Ruby是強類型語言,在發生類型沖突時,將得到一個錯誤。如果把個語句放在def...end函數定義中,則只有在調用函數時才會報錯,說明Ruby在運行時而非編譯時進行類型檢查,這稱為動態類型。Ruby的類型系統有自己的潛在優勢,即多個類不必繼承自相同的父類就能以“多態”的方式使用:
a = ['100', 100.0]puts a[0].to_i # => 100puts a[1].to_i # => 100
這就是所謂的“鴨子類型”(duck typing)。數組的第一個元素是String類型,第二個元素是Float類型,但轉換成整數用的都是to_i。鴨子類型并不在乎其內在類型是什么,只要一個對象像鴨子一樣走路,像鴨子一樣嘎嘎叫,那它就是只鴨子。在面向對象設計思想中,有一個重要原則:對接口編碼,不對實現編碼。如果利用鴨子類型,實現這一原則只需極少的額外工作,就能輕松完成。
新聞熱點
疑難解答