突然,我認識了你—-Ruby

來源:互聯網
上載者:User
從陌生,到有了初步認識;從閱讀到動手實踐,想說,你很美!

Ruby 是一種純粹的物件導向的指令碼語言,它由日本的 Yukihiro Matsumoto 開發。設計這種語言主要是用來控制文本處理(和Regex又有關係了)和系統管理任務。

轉自IBM:用 Ruby 語言編程

正如下面的樣本所示,任何曾經編寫過如 Perl 或 PHP 等指令碼語言的人都會熟悉 Ruby 文法。但是,Perl 或 PHP 需要使用分號作為一個行結束符,Ruby 與它們不同,它不需要行結束符。某些開發人員起先可能會對此感到有些困惑,不過我發現這實際上加速了開發的過程。例如,我再也不會收到“Error missing ; on line x”的訊息了。為了對 Ruby 世界有一個初步的瞭解,並闡述這個思想,請看一個經典的 Hello World 樣本:

清單 1. Hello world

#!/usr/bin/ruby## My first ruby program#print "Hello World\n"



回頁首

變數

Ruby 語言中的變數非常容易處理。讓我們擴充第一個樣本,並引入一個改變輸出的簡單方法。

清單 2. 改變輸出

#!/usr/bin/ruby## My first ruby program## Declare our salutation$salut = "Good Bye World\n"# Prepare statements print "Hello World\n" print $salut

使用 $salut 變數,我們可以隨時輕易地改變第二個 print 語句的輸出。您可以在程式的任何地方聲明變數。

清單 3. 聲明變數

#!/usr/bin/ruby## My first ruby program#$salut = "Good Bye World\n" print "Hello World\n" print $salut## Declare a new value for $salut.#$salut = "Oh, I am sorry. I didn't mean to warnyou...\n" print "What do you mean Good Bye World?\n" print $salut

如果執行上述樣本,將會輸出以下內容:

Hello WorldGood Bye WorldWhat do you mean Good Bye World?Oh, I am sorry. I didn't mean to warn you...

正如您看到的那樣,變數的重新賦值生效了。



回頁首

單引號和雙引號

像大多數語言一樣,Ruby 區分雙引號和單引號。在 Ruby 語言中,雙引號表示 Ruby 將解釋包含在引號內的任何值。例如:

print "Hello World\n"

Ruby 解譯器將轉義 \n 並列印一個分行符號到 STDOUT(標準輸出)。但是,如果我們要執行帶單引號的同樣語句,例如:

print 'Hello World\n'

Ruby 將輸出如下內容:

Hello World\n

注意新的一行沒有被列印。取而代之的是 Ruby 把整個語句看作了文字,這和 Perl 使用的功能一樣。



回頁首

單詞算術

在 Ruby 語言中,所有字串都可以使用操作符。這就意味著在某種意義上我們可以對單詞進行算術運算。例如:

$salut = $salut * 3

將會產生如下結果:

Oh, I am sorry. I didn't mean to warn you...Oh, I am sorry. I didn't mean to warn you...Oh, I am sorry. I didn't mean to warn you...

$salut = $salut + " 10, 9, 8..." print $salut

將會產生如下結果:

Oh, I am sorry. I didn't mean to warn you...Oh, I am sorry. I didn't mean to warn you...Oh, I am sorry. I didn't mean to warn you... 10, 9, 8...

注意到儘管變數列印了三次,但是 "10, 9, 8..." 的串聯只在程式最後列印了一次。為什麼會這樣?

原因是我們只把 "10, 9, 8..." 添加到了變數的末尾。我們並沒有要求變數將 "10, 9, 8..." 添加到每一行。另外,注意對變數的當前使用的繼承性也很重要。

一旦給一個變數賦了值,除非再重新賦值,否則它就一直是靜態,正如樣本中我們將 $salut"Hello World\n" 改為等於 "What do you mean Good Bye World? \n" 。但是,當變數進行乘法和串聯操作時情況就不是這樣了。您可以從上一個樣本看出,對變數使用串聯(+ 符號)將會導致這個變數繼承它早先的賦值 加上添加到它的賦值上的字串。在我們的樣本中,添加的字串是 "10, 9, 8..."。



回頁首

數組

如果知道將多次對 $salut 變數賦值,您會怎樣做呢?這在很多情況下都會發生。因此,您可以將所有的變數值放進一個數組裡,而不是手動地給變數重新賦值。

數組允許對每個變數值進行分別的處理。請看如下樣本:

$salut = ['Hello World','Good Bye World','What do youmean Good Bye World?'] print $salut

運行上述代碼得到的輸出如下所示:

Hello WorldGood Bye WorldWhat do you mean Good ByeWorld?

顯然,這不是我們想要的輸出。沒有間隔也沒有換行。因此,我們可以標識希望顯示數組的哪一部分,並使用先前解釋的串聯技術來更方便地提供易讀的輸出。

$salut = ['Hello World','Good Bye World','What do youmean Good Bye World?'] print $salut[0] + "\n" print $salut[1] + "\n" print $salut[2] + "\n"

將會導致如下輸出:

Hello WorldGood Bye WorldWhat do you mean Good Bye World?

仔細分析這些代碼。如果回顧一下我們建立的數組:

$salut = ['Hello World','Good Bye World','What do youmean Good Bye World?']

我們告訴 Ruby 定義一個名為 salut 的變數,其值為:

$salut = 0 1 2
Hello World Good Bye World What do you mean Good Bye World?

每個值通過一個數字來被識別。數字通過數組中的數字位置來定義。位置總是從 0 開始,並從 0 開始遞增。所以要列印數組中的第 2 個值,您要輸入:

print $salut[1]

最容易忘記的是欄位從 0而不是從 1開始。



回頁首

條件 ― IF,ELSE

我們已經探討了用 Ruby 語言顯示資料的基礎知識。現在來看 Ruby 編程中有關邏輯的初步知識。也就是說,讓我們根據從程式員那裡獲得的結果來指示 Ruby 程式執行準系統。我們還要根據 Ruby 程式從使用者那裡獲得的結果看如何執行條件陳述式。在這些樣本中將使用新的代碼。

清單 4. 根據結果執行準系統

$salut = ['Hello World','Good Bye World','What do youmean Good Bye World?'] print "When you enter the world, what do you say? " while enterWorld = STDIN.gets   enterWorld.chop!   if enterWorld == $salut[0]     print "\n" + "Yes. Hello World would bepolite.\n"     break   else     print "You say '", enterWorld, "'?!\n" + "Youhumans are so rude!\n"   end  end

上面的程式碼片段引入了 Ruby 開發的幾個新的方面,讓我們瀏覽這些片段。

按部就班地瀏覽我們的樣本

#!/usr/bin/ruby## My first interactive ruby script## Define our main variable with an array$salut = ['Hello World','Good Bye World','What do youmean Good Bye World?']# Print my first question print "When you enter the world, what do you say? "# Create a while loop with the object enterWorld andawait data from# standard input. The while loop will make sure thatruby continues# to process the application until the program tellsit to stop. while enterWorld = STDIN.gets# Make sure we use the chop method on the enterWorldobject. The use# of the chop method will insure that we strip newlines and carriage# returns from our input.# You will notice that using the chop method has anextra# character. The ! allows the existing object to bemodified# by the method. If you did not use the !, you wouldhave to redeclare# the enterWorld object for the if condition tocorrectly occur.   enterWorld.chop!# Begin the condition sequence. Basically, ifenterworld equals# Hello World, which is 0, within the array, print# a new line. Then print, "Yes, Hello World would bepolite." to the screen.   if enterWorld == $salut[0]     print "\n" + "Yes. Hello World would bepolite.\n"# The break statement tells ruby to stop executing ifthe previous# condition is met. If we did not include this in ourwhile loop,# the program would run continuously.    break# The else statement is used as the secondarycondition. In other# words, if the first condition is not met, please dothe following.   else     print "You say '", enterWorld, "'?!\n" + "Youhumans are so rude!\n"   break# The end statement is used to close a condition orloop. In our case,# it is being used to close both. We are first closingour if# condition statements and then stopping our whileloop.   end  end



回頁首

對象和方法

這個程式碼片段中用到的一些技術和方法您可能是第一次見到。Ruby 是一種物件導向的編程(Object Oriented Programming,OOP)語言。使用 OOP 時,通常情況下程式員將調用諸如對象和方法之類的項目。 對象就象一個容器。它包含自己特定的變數和函數。 方法是一種被調用的東西,就像函數對對象進行專門處理一樣。如果看一下先前的樣本,我們就可以顯示工作中的對象和方法。

while enterWorld = STDIN.gets   enterWorld.chop!

這裡我們有兩個對象和兩個方法的樣本。第一個對象是 enterWorld ,第二個對象是 STDINenterWorld 對象是使用者定義物件,而 STDIN 對象(Standard Input 的縮寫)是 Ruby 內建的。

這個樣本中還有兩種方法。第一種是 gets ,第二種是 chop! 。前面提到過,方法對對象進行專門處理。明確地說,方法將在對象中執行一個操作。用 gets 方法,我們告訴 Ruby 去擷取 STDIN 。當 Ruby 看到與 STDIN 關聯的 gets ,它就會等待鍵盤輸入和一個斷行符號。簡而言之, STDIN.gets 就是等待使用者輸入一些內容然後敲 Enter 鍵。

第二種方法 chop! 用來對使用者定義物件 enterWorld 進行專門處理。 chop! 方法告訴 enterWorldenterWorld 對象關聯的資料的分行符號和斷行符號符截去。如果不使用 chop! (或者 chomp! ),那麼包含在先前代碼上下文中的下面語句永遠都不會為真。

if enterWorld == $salut[0]

因為沒有使用 chop! ,所以得出結果將為假, $salut[0] 實際上就等於 $salut[0]\n 。新行是由 STDIN 對象從 gets 方法接收的輸入產生的。使用斷行符號將會在值末尾添加一個分行符號。



回頁首

結論

Ruby 是一種非常強大而且便於使用的語言。如果您是一個出身於 C++、 Perl 或 Python 的程式員,您會發現它們與 Ruby 有一些極為相似之處(尤其是 Python 語言)。這個系列的下一篇文章將會基於這篇介紹討論一些更進階的課題,比如使用 Roby 模組以及檔案操作。



回頁首

參考資料

  • 您可以參閱本文在 developerWorks 全球網站上的 英文原文.

  • 關於更多的 Ruby 基礎知識,包括對於 Ruby 建立者 Yukihiro Matsumoto 的採訪,請參閱 developerWorks上的 “Ruby: A new language”。

  • 請參閱官方的 Ruby Web 網站。

  • 請訪問 Ruby 園地。

  • 在 Ruby 詳細說明中學習更多有關 Ruby 的知識。

  • 尋找更多關於 Ruby for Win32的內容。

  • 請在 Ruby Central 駐足。

  • 請查閱 Ruby 應用檔案,這是用 Ruby 維護的。

  • 請參閱 Ruby 功能的簡單列表,其中包含關於 Ruby 優缺點的簡短討論(英文版和德文版)。

  • 請參閱 FileWatcher.org 的 最新 Ruby 檔案更新情況。

  • 請閱讀 面向 Windows 使用者的 Ruby。

  • 請訪問 Joshua Drake 的 Web 網站 Command Prompt。

  • 請在 developerWorks瀏覽 更多的 Linux 參考資料。

  • 請在 developerWorks瀏覽 更多的開放原始碼參考資料。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.