作者:http://www.ruby-cn.org/ 轉載請保留
1、簡介
Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的物件導向的指令碼語言,像perl一樣,有豐富的文文書處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。
一般認為,他有如下特點:
- 簡單
解釋型語言(インタプリタ),所以不必事先編譯(コンパイル)。
變數沒有類型的區分,雖然可以省去類型錯誤的擔憂,但也會引起編譯時間候檢查的脆弱。
變數不需要定義。
簡單的文法,多從Eiffel繼承而來。
不需要記憶體管理,系統提供GC(ガーベージコレクタ)處理機制。
- 純的物件導向的語言
一切都是對象,像整數等類型從開始就被設計為對象來處理。
class(クラス),繼承,method(メソッド)等
(特殊方法?)特異メソッド
module(モジュール)によるMixin
迭代(イテレータ)和閉包(クロージャ)。一個在閉包開始時定義的資源在閉包結束後會被釋放, 適合於socket,資料庫連接,檔案控制代碼等。
- 指令碼語言
解釋執行
很強的文文書處理能力和Regex
直接存取OS,用ruby編寫系統程式也是可能的。
- 其他
支援多種長整數,記憶體允許,可以進行很大數的計算操作。
具備異常處理能力,具備java的異常處理功能。
dynamic loading(ダイナミックローディング )。可以在運行時候重定義自己, 類也可以在運行時繼承/取消繼承。
線程。現在的ruby已經有線程的概念,Ruby2.0好像能支援本地線程。
反射(Reflection)。Ruby可以看到程式的內部,比如一個模組是否含一個特定方法, 一個對象是哪個class等等。類似java。
擴充性。C api。
發行許可證。基於Ruby Artistic License (BSD樣式的)和GPL。
2、環境安裝
(1).安裝1.可以從www.ruby-lang.org下載原始碼進行安裝。
(2).解壓縮源檔案,進入安裝目錄
#./configuremake
#make
#install
3.使用
(1). 使用irb。irb是一個互動介面,在shell裡運行它,首先顯示提示符,等待輸入;使用者輸入之後,它在進行處理,把結果顯示給使用者。
#irb irb(main):001:0> $str="hello world!/n" => "hello world!/n" irb(main):002:0> print $str hello world! => nil irb(main):003:0> |
(2).像其他語言一樣,從程式檔案運行
[root@tserver /root]# chmod a+x foo.rb [root@tserver /root]# cat foo.rb #!/usr/local/bin/ruby -w puts "Hello, World!" [root@tserver /root]# ruby foo.rb Hello, World! [root@tserver /root]# ./foo.rb Hello,World! [root@tserver /root]# |
(3).Ruby使用方法
ruby [ option ...] [ -- ] [ programfile ] [ argument ...]pre>
關於Ruby的命令列參數,可以參考相關文檔。
4.簡單例子
def sayGoodnight(name) result = "Goodnight, " + name return result end
# Time for bed... puts sayGoodnight("John-Boy") puts sayGoodnight("Mary-Ellen") |
可以看到,ruby的文法還是比較簡單的,首先,你不必每行都寫個分號, Ruby注釋以#開頭,直到行尾。
Methods定義以關鍵字def開始,接著是方法名和方法參數, ruby不需要用braces來界定程式主體,只需要關鍵字end就行了。
這個程式也相當簡單,第一行把``Goodnight, ''加上參數name,並把它賦給了局部變數result,第二行把結果返回給調用者。注意我們不需要定義變數result。
最後我們調用了2次這個方法,並把結果傳給puts函數,這個函數簡單的再新行上列印傳給它的參數而已,最後結果像這樣:
Goodnight, John-Boy Goodnight, Mary-Ellen |
其實 puts sayGoodnight("John-Boy") 包括了2個函數調用,一個put系統函數,一個sayGoodnight函數。但是為什麼puts調用沒有用括弧呢?實際上,下面的調用都是等價的:
puts(sayGoodnight "John-Boy") puts(sayGoodnight("John-Boy")) puts sayGoodnight("John-Boy") puts sayGoodnight "John-Boy" |
但是如果都不寫括弧,你知道那個參數傳給誰嗎?所以還是建議在方法後面加上括弧,方便閱讀來源程式。
這個方法還展示了string對象,有很多種辦法可以建立string對象,但最普通的要算用string literals了:單引號或雙引號包起來的一組字元。它們的區別是ruby構建這兩種字串時要做的操作。對單引號引起來的字串來說,ruby做的工作會很少,單引號引起來得部分就是它的值。如果是雙引號引起來得,則要做多一些工作了。首先,它檢查是否包含反斜線,也就是轉義符,然後用適當的二進位值代替,最常見的就是"/n"了,它將會被換行替換。如:
| puts "And Goodnight,/nGrandma" |
產生結果如下:
第二件事情就是expression interpolation。#{ expression }被expression的值代替,例如,下面的方法和剛才的例子是一樣的結果
def sayGoodnight(name) result = "Goodnight, #{name}" return result end |
當然我們還可以再簡化這個函數。一個ruby函數返回的結果就是最後一行的值,所以這個函數也可以寫成如下:
def sayGoodnight(name) "Goodnight, #{name}" end |
Ruby使用俗定的命名方式為變數命名,變數名的第一個字母標誌了它的類型,是局部變數,還是方法參數,方法名應該以小寫字母或者底線開頭,全域變數應該以$開頭,執行個體變數以@開頭, class變數以@@開頭,而類名,模組名,常量應該以大寫字母開頭。
一個名字可以是字母,數字,底線的任意組合,但是有@後面不允許直接跟著一個數字。
總之,作為一門語言,不是一兩個例子,幾個文章能說清楚地,在網上流傳的我愛ruby的10個原因等跟天下足球top ten類似的短文中,總會看到一個理由,就是fun with ruby。也許,更有趣的還在後面。