1、簡介 Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的面向對象的腳本語言,像perl一樣,有豐富的文字處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。Ruby是一種功能強大的面向對象的腳本語言,可以使用它...
1、簡介
Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的面向對象的腳本語言,像perl一樣,有豐富的文字處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。
Ruby是一種功能強大的面向對象的腳本語言,可以使用它方便快捷地進行面向對象程式設計。與Perl類似,而且Ruby具有強大的文本處理功能,使文本處理變得簡單。此外還可以方便地使用C語言來擴展Ruby的功能。
若您曾經“想要一種簡單的面向對象的語言”,或者認為“Perl的功能雖然好用,但它的語法真讓人受不了”,又或者覺得“LISP系列語言的思想不錯,但到處都是括弧真讓人討厭,最起碼算式應該按照通常的樣式書寫”。那麼,Ruby或許能讓您滿意。
歸納起來,Ruby有以下優點:
解釋型執行,方便快捷
Ruby是解釋型語言,其程式無需編譯即可執行。
語法簡單、優雅
語法比較簡單,類似Algol系語法。
完全面向對象
Ruby從一開始就被設計成純粹的面向對象語言,因此所有東西都是對象,例如整數等基本數據類型。
內置正則式引擎,適合文本處理
Ruby支持功能強大的字元串操作和正則表達式檢索功能,可以方便的對字元串進行處理。
自動垃圾收集
具有垃圾回收(Garbage Collect,GC)功能,能自動回收不再使用的對象。不需要用戶對記憶體進行管理。
跨平臺和高度可移植性
Ruby支持多種平臺,在Windows, Unix, Linux, MacOS上都可以運行。Ruby程式的可移植性非常好,絕大多數程式可以不加修改的在各種平臺上加以運行。
有優雅、完善的異常處理機制
Ruby提供了一整套異常處理機制,可以方便優雅地處理代碼處理出錯的情況。
擁有很多高級特性
Ruby擁有很多高級特性,例如操作符重載、Mix-ins、特殊方法等等,是用這些特性可以方便地完成各種強大的功能。
一般認為,他有如下特點:
- 簡單
解釋型語言(インタプリタ),所以不必事先編譯(コンパイル)。
變數沒有類型的區分,雖然可以省去類型錯誤的擔憂,但也會引起編譯時候檢查的脆弱。
變數不需要定義。
簡單的語法,多從Eiffel繼承而來。
不需要記憶體管理,系統提供GC(ガーベージコレクタ)處理機制。 - 純的面向對象的語言
一切都是對象,像整數等類型從開始就被設計為對象來處理。
class(クラス),繼承,method(メソッド)等
(特殊方法?)特異メソッド
module(モジュール)によるMixin
迭代(イテレータ)和閉包(クロージャ)。一個在閉包開始時定義的資源在閉包結束後會被釋放, 適合於socket,資料庫連接,文件句柄等。 - 腳本語言
解釋執行
很強的文字處理能力和正則表達式
直接訪問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) # Time for bed... |
可以看到,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" |
產生結果如下:
And Goodnight, Grandma |
第二件事情就是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。也許,更有趣的還在後面。