《Ruby入門權威經典》(一)

來源:互聯網
上載者:User

作者:於天恩 北京航天航空出版社出版發行。

Ruby是一種語言,其單詞含義為“紅寶石”。Rails是一種技術架構,其單詞意思為“鐵軌”。於是“Ruby on Rails”的含義就是鋪滿紅寶石的鐵軌。Rails是B/S結構的編程架構,基於Ruby語言。這類似於ASP基於VBScript和JSP(Struts)基於Java。

單獨學習Ruby是可以的,你可以使用Ruby去編寫各種程式。不過,通常人們不會這麼做,對我而言,最好的萬能語言是Java,用JBuilder開發Java程式是非常舒服的。如果你也不打算使用Ruby作為萬能語言的話,那麼最好使用它來做Web開發,也就是使用Ruby on Rails架構,這是Ruby最好的應用。

生而知之者,上也;學而知之者,次也;困而知之者,又其次也。

“人事有可陷者,亦有不可陷者”,陷於技術,不值得。

悟性,因人而異,不可強求,慾望,因人而異,不應執著。

誠然人的天資很重要,非常重要,相當重要。但有幾句話要提醒讀者:“勤能補拙是良訓,一分辛勞一分才”。天資是天給的,不是人定的。但在天資之外,你還有很多事情可以做,通過勤奮、堅持、刻苦,縱然超不過天才,你也定然能成為超越常人的天才。

Ruby語言的特點:(1)解釋執行,不需要編譯即可運行,調高了調試速度,不過執行效率低。(2)變數無類型,錯誤檢查能力變弱,區分大小寫。(3)變數不需要聲明(4)不需要記憶體管理,能自動回收不再實用的對象。(5)純粹的物件導向,包括整數等基礎資料型別 (Elementary Data Type)都是對象,它們都有發送訊息的統一介面。(6)迭代器,將迴圈抽象化,從而使得代碼簡潔。(7)功能強大的字串操作(8)超長整數(9)可以直接存取作業系統,因此單獨使用Ruby也可以進行系統編程。(10)用模組進行混合插入,捨棄了多重繼承,使用模組來超越類的界限以共用資料和方法等。(11)閉包,可以將某過程片段對象化。(12)動態載入,可以在運行時讀入對象檔案。

第一章 Ruby語言基礎

特別注意安裝版本如果是1.9.x的不支援中文,因為最好安裝1.8.x。

(1)Ruby中的引號包含單引號和雙引號,單引號中可以包含雙引號,雙引號中也可以包含單引號。大多數情況下,這兩種符號是通用的。

(2)逸出字元:\、\t、\n。

(3)連句符:分號就是語句的串連符。分行符號:\n。注意:如果被輸出字串不是以分行符號結尾,puts方法就會在輸出的語句後增加一個分行符號;如果輸出字串以分行符號結尾,那麼puts方法就不會在語句結尾增加分行符號。

(4)連行符:當語句過長時,會影響閱讀,希望分成多行去寫。一種方式是使用字串串連符來串連語句,但字串串連符屬於運算子,會消耗資源。而連行符屬于格式控制字元“\”。

(5)注釋符:單行注釋使用“#”;多行注釋使用“=begin”和“=end”塊。

(6)局部變數:即普通變數,在Ruby中由小寫字母或底線開頭,局部變數在使用之前如果不初始化,將會出錯。。

(7)基本輸入:Ruby中使用gets方法來解決最基本的輸入問題。例如,可以用a = gets來將使用者輸入的字元儲存在局部變數a中。

(8)基本輸出:puts和print。

(9)數字和字串串連:Ruby支援整型和浮點型。使用“+”作為字串串連符號。

**************************************************************************************************

(1)類:Ruby的物件導向比Java純粹,一切都是對象。所以,Ruby中沒有函數,只有方法;Ruby中所有的變數、常量都不能脫離類存在。

(2)最簡單的類:屬性+方法。在Ruby中,類名以大寫字母開頭,執行個體屬性以“@”開頭,變數和方法名應該用一個小寫字母或者底線開頭。定義類的方法是用“def...end”語句塊,如果需要方法傳回值,可用“return”語句。類的初始化使用“initialize”方法。

(3)類的基本使用:Ruby是用new方法來構建類的執行個體,如:m=Man.new。構造執行個體之後,就可以使用類的方法。

(4)繼承:Ruby是用“<”符號來實作類別的繼承,這與Java中的“extends”及C++中的“:”不同。在子類中增強父類方法要使用“super”作為關鍵字(如果要加強的父類方法有參數,那麼就用super(參數)的方式來加強)。

(5)單態方法:Ruby是弱類型語言,只有重寫,沒有重載。故沒有辦法顯示出其多態性。但是Ruby有單態方法,這意味著,從某個共同的類衍生出的多個對象可以擁有各自不同的方法。

(6)方法存取控制:在Ruby中只有方法,沒有函數,每一種方法都是存在於類中的。那麼,如果不在任何類中的定義的方法,應該屬於Object類。理論上講,這個方法可以被所有的對象使用,但如果是真的,這樣就亂了。所以,Ruby將其實現為Object類的私人方法,於是,它不能被對象使用。Ruby中提供了三個關鍵字來限制對方法的存取:pubulic,可以為任何對象所存取的方法(public是所有方法的預設設定);protected,可以在定義它的執行個體或者子類的執行個體中調用;private,只可以在這個方法所處的對象中被使用,不能直接調用另一個對象的private方法,包括調用自身也不允許。 這些關鍵字被插在兩個方法之間的代碼中,所有從private關鍵字開始定義的方法都為私人的,知道代碼中出現另一個存取控制關鍵字為止。一個類的initialize方法自動為私人的。(除了在方法之前設定其存取權限之外,還可以在方法定義之後設定,如:public:free private:sayname,:sayage)。

(7)屬性讀寫控制:類中的屬性,包括唯讀屬性、唯寫屬性和讀寫屬性。通過類似set和get的函數來進行設定。

(8)垃圾收集:Ruby實現了自動的記憶體管理,實現了垃圾收集。它沒有類似Java的finalize方法,但它有類似.NET的GC類用來實現垃圾清理和記憶體回收。GC類具有disable、enable、start、garbage_collect4個方法,其中前兩個是關閉和啟動垃圾收集器,start方法和garbage_collect意義相同,都是調用start方法來實現垃圾收集功能。

(9)異常處理:Ruby使用begin...rescue...end結構來處理異常,這類似於Java中的try...catch...finally。應用方法是一直的,都是在某個塊中監視,找到異常就處理。retry語句可以重新執行begin塊中的內容。Ruby中使用raise語句拋出異常,類似於Java的throw語句。異常的資訊可以被全域變數$!獲得。Ruby中使用ensure語句來實現語句塊的最後清理,類似於Java中的finally。注意:在begin...rescue...end塊中可以只使用ensure或rescue(這類似於try...catch...fiannly),但如果同時使用ensure和rescue,那麼ensure必須在rescue後面。

**************************************************************************************************

(1)Ruby有三類變數、一種常量和兩種嚴格意義上的為變數,變數和常量都沒有類型。在Ruby裡不需要聲明變數,由首字母標識符將常量和變數分類。

變數類型描述 樣本

局部變數 以小寫字母或底線卡頭 var _var
全域變數 以$開頭 $var
類變數 類中定義,以@@開頭 @@var
執行個體變數 對象中定義,以@開頭 @var
常量 以大寫字母開頭 Var

注意:Ruby的為變數self永遠指向當前正執行著的對象或未初始設定變數的空值nil。雖然這兩者的命名都像是局部變數,但self是由解譯器把持的全域變數,而nil實際上是個常量。

(2)常量:常量由大寫字母開頭,最多被賦值一次。不過如果賦值多次,只會產生警告,不會產生錯誤。

(3)全域變數:全域變數由“$”開頭,可以再程式的任何位置訪問到。在初始化前,全域變數有個有一個特殊的值nil。

$!:最近一次的錯誤資訊; $_:gets最近讀的字串; $&:最近一次與Regex匹配的字串 $n:最近匹配的n個子運算式 $/:輸入記錄分隔字元 $0:Ruby指令碼的檔案名稱 $$:解譯器進程ID $@:錯誤產生的位置 $.:解譯器最近讀的行數 $~:作為子運算式組的最近一次匹配 $=:是否區別大小寫標誌 $\:輸出記錄風格福 $*:命令列參數 $?:最近一次執行的子進程的退出狀態。

(4)unless語句:用於選擇條件,是“if”選擇的否定版。多重選取語句:case(與when進行組合),相當於C++中的switch語句。

(5)while迴圈:單行while迴圈 單條語句 while 條件;until迴圈 until 條件 代碼 end;for...in迴圈 for 變數 in 集合對象 對象 end。

迴圈控制:break 跳出當前迴圈;next 忽略本次迴圈的剩餘部分,開始下一次的迴圈,相當於C中的continue;redo 不檢查迴圈條件,重新開始當前迴圈;retry 從頭開始重複這個迴圈體。

(6)塊:它是一種可以和方法調用相關聯的代碼塊。塊是在大括弧或者do...end之間的一組代碼。使用Ruby的yield語句方法可以一次或多次的調用相關聯的塊。帶參數的塊,參數被兩條豎線包圍,多個參數之間使用逗號分隔。

(7)迭代器是從某種集合對象中連續返回元素的方法。在Ruby庫中大量使用了塊來實現迭代器。數組和區間都屬於集合對象。

(8)過程對象:把一塊代碼作為參數向某個方法傳遞。建立過程對象需要使用proc關鍵字,建立好的過程對象可以使用,通過call方法就能使用這個對象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.