
[Day09] 別小看喬巴特製研發的藍波球!
今天要介紹的是**回傳(return)**!
在 Ruby 的世界裡,所有的方法執行完後都有回傳值(return value),沒有的話則會回傳一個 nil。
回傳的特性是:
回傳 = 交回控制權
- 控制權就像令牌一樣,手上有令牌,才能執行程式碼。
- 執行完之後,會把控制權再交還給當初呼叫他的人。
單看文字可能有點不好理解,我們來看看實際的例子:
1 | def calc_perimeter(radius) |
在這短短幾行中,程式執行了這幾件事:
- 呼叫
calc_perimeter方法,並傳回5作為引數。 - 執行
calc_perimeter方法。 return交還控制權,並同時回傳計算結果 =>31.41592653589793。- 把計算結果交給
puts方法,並印出內容。
在 Ruby 裡,我們也可以省略 return 不寫,方法會自動回傳最後一行的執行結果!
把結果印出來讓我們更了解回傳值!
在學習程式語言的過程中,把結果印出來是相當常見的行為,而要在 Ruby 裡做到這件事,我們會使用:
printputsp
以上三者都可以替我們達成印出結果的目標,但是為什麼有三種寫法?有沒有什麼不同呢?先來看看程式實際是如何運作的吧:
1 | print "Ruby" |
我們可以發現如果用的是 print 只能印出結果,也不會換行。同時, print 和 puts 回傳的都是 nil,nil 代表的意思是沒有回傳值,不過如果是用 p 來印出結果,它還會順便帶一個回傳值回來。
1 | puts "aaa" |
用簡單的表格來比較三者的差異:
|print |puts |p |
|——–|——–|——–|
|不換行 |換行 |換行 |
|回傳 nil|回傳 nil|回傳帶有型態的值|
|印出內容|印出內容|印出完整型態的內容|
為了更加了解 puts 和 p 的差異,這裡有一組例子:有兩個方法分別為 a, b ,皆使用 p 印出結果:
1 | def a |
不過如果把方法 a, b 改成用 put 印出結果:
1 | def a |
就只會印出 aaa 了。
這是因為 && 的特性是左右兩側皆為 true 才會成立。
所以當我們用 p 印出結果時,由於 a , b 兩個方法都有回傳值,因此 a && b 除了會執行方法 a , b 各自要做的事情 => 印出 "aa" 和 "bb" 。還會有一個的回傳值為 "bb"(因為 Ruby 會自動回傳最後一個方法的結果)
不過,如果改成用 puts 來印出結果,則會因為方法 a 的回傳值為 nil 而無法執行方法 b ,想當然爾, a && b 最後也沒有回傳值了!
今天就先到這邊啦!