Easyfun Easy fun Easy to play

Ruby

Ruby的基本方法

呼叫方法

註解:

在Javascript是用//來做註解,Ruby裡是用#做開頭來當做註解。

puts與print:

puts是”put sreing”的簡寫,以便把文字顯示在標準輸出。我們會把一個字串(內容所要顯示的文字)傳遞給puts。

接著在把另一個字串傳遞給下一列的print方法,以便詢問使用者名字。print方法的行為就像puts,但是puts會自動在字串結尾添加一個換列符號以便跳到下一列,但是print並不會這樣做。

Ruby的頂層執行環境(top-level execution environment)納入了這兩個方法以供呼叫。在Ruby中,你不必指定接收者就可以呼叫頂層環境中所定義的方法。

方法引數

puts方法需要取得字串並把它印到標準輸出。

puts “Hello worrld”

被傳遞給puts方法的字串稱為方法引數(argument),puts方法可以取得多個引數;只需使用逗號隔開引數就行。

puts “Hello”, “Mike”, “I’m fine”

gets:

gets方法(gets是”get string”的簡寫)會從標準輸入讀取一列資料。當呼叫gets,會導致程式暫停直到使用者鍵入他們的值以及按下enter,最後gets會回傳使用者所鍵入的值。

跟puts和print一樣,可在任何一處呼叫gets而不必指定接收者。

方法呼叫中的()可省略

在Ruby中,引數會被放在一對圓括號裡:

puts(“Easy”, “Fun”)

可改成

puts “Easy”, “Fun”

gets方法會從標準輸入讀取一列資料。他通常不需要任何引數:

get

即使是有效的,也要避免這樣做

gets()

字串安插

把變數的值安插(interpolate)到字串中。每當被雙引號括住的字串包含#{…}標記時,Ruby會使用大括號裡的值來填空(fill in the blank)。#{…}標記可能會出現在字串中任何位置:開頭、結尾或是中間某處。

#{…}標記中不一定要使用變數-可以使用任何Ruby運算式。

使用inspect和p方法來檢視物件:

每個Ruby物件都會有inspect方法可供呼叫。他會把物件轉換成適合除錯的字串表達形式。他會揭示物件通常不會在程式輸出中呈現的面相。

puts input.inspect

印出inspect結果的需求很普遍,於是Ruby提供了另一個方式:p方法。他的方式如同puts,不過在印出結果之前,他會對每個引數呼叫inspect。

字串中的規避序列

在p方法的使用,結尾處會有兩個字符,主要有幾種常見的

  字符
\n 換列(newline)
\t 跳格(tab)
" 雙引號(double-quote)
\ 倒斜線(backslash)

把一個雙引號(“)放入被雙引號括住的字串中,他會被視為字串的結尾符號,因此導致錯誤。

我們可以在雙引號前放置一個倒斜線符號來規避雙引號,這樣即使在被雙引號括住的字串中放入雙引號也不會錯誤。

puts “"Hello," I’m fine.”

因為\是規避序列的起始標記,還需要一個方法來表示非規避序列起始標記的倒斜線符號。

puts “Hello world: \”

這些規避序列多半僅適用於被雙引號括住的字串。在被單引號括住的字串中,大多數的規避序列只有在字面上的作用。

puts ‘\n\t"’

呼叫字串物件上的chomp方法

如果字串的結尾字符是一個換列符,chomp方法將會移除他,他適合用於清理,例如:gets所回傳的字符。

不同於printf、puts和gets,chomp方法的應用較窄,所以只有字串物件會提供此方法。我們需要把input變數中的字串指定為chomp方法的接收者(receiver)。我們需要對input使用點號運算符。

print “Your name:” name = gets puts “Hi, #{name}!”

結果:

Your name: Mike Hi, Mike !

print “Your name:” name = gets.chomp puts “Hi, #{name}!”

結果:

Your name: Mike Hi, Mike!

Chomp會回傳相同的字串,但是結尾處的換列符已被移除,會將此字串存入名為name的變數,該變數是歡迎詞的一部分,他會一起被印出。

物件提供了哪些方法

無法對任何物件呼叫任何方法,會有錯誤訊息。

undefined method `upcase’ for 42:Integer (NoMethodError)

可以呼叫methods的方法來看

產生隨機數字

rand會在所給定的範圍內產生一個隨機數字,以一個數字做為引數傳遞給rand:

puts rand(50)

rand所產生的數字將會介於零到「你所指定之最大值減1」之間,我們會得到範圍0~49的隨機數字,而不是1~50的隨機數字,我們只要把rand回傳的值加1即可。

rand(50) + 1

轉換為字串

當要把字串相加時,會使用加號(+)把字串連接在一起,就像JS可以直接做相加,但在Ruby這樣是沒用的。

在Ruby裡所有的物件都具有to_s方法,此方法可以進行轉換。

str = “Number is:” + 123.to_s

條件式述句

Ruby條件式敘句(conditional statement):會使的程式碼只在條件相符的情況下執行。

if 1 < 2 puts “true” end

還有if/elsif/else

if 1 < 2 puts “true” elsif 1 > 2 puts “false” else puts “不正確” end

if的相反是unless

Ruby的額外關鍵字: unless。if述句是在條件式結果為真(true)才會被執行,但在unless述句中,只有在條件式為假(false)才會被執行。

unless true puts “我不會被印出!” end

unless主要可以讓程式碼變成容易閱讀的。

if !(light == “red”) puts “Go” end

可以改成

unless light == “red” puts “Go” end

迴圈

while迴圈是以一個單字while、一個布林運算式、反覆執行的程式碼來組成。只要條件求值結果為真就會反覆執行迴圈主體。

number = 1 while number <= 5 puts number number += 1 end

until迴圈是while的反義,也可以用until來做迴圈的處理:

number = 1 until number > 5 puts number number += 1 end while number <= 5 puts number number += 1 end