Ruby 中最常見的兩種數字型別是:
-6、0、1、25、976和500000。-2.4、0.1、3.14、16.984025和1024.0。它們是透過Integer和Float類別實作的。
這些類別帶有方法,可以將值從一種型別轉換成另一種。Integer數字精確到整個單位,而Float的精確度則是相對於整數的小數:
Integer#to_f:轉換成新的浮點數Float#ceil:向上取整至最接近的整數Float#floor:向下取整至最接近的整數Float#round:四捨五入至最接近的整數Float#to_i:截斷至最接近的整數Ruby 有所謂的流程控制運算式,用來控制程式的執行方式,它們會接收真值或假值。 有些運算子可以用來產生真值或假值,這些運算子稱為比較運算子。
有兩種主要的控制運算式,用來控制哪些程式碼會執行、哪些不會。 也就是控制會執行哪個分支。
這兩種是:if和unless運算式。
比較運算子用來比較值,並回傳true或false值。
下列運算子需要兩個型別相同的值才能比較。
如果這兩個值的型別不同,編譯器就會拋出錯誤。
以下是這些運算子的清單,以及它們得到true值的例子:
| 方法 | 說明 | 範例 |
|---|---|---|
| < | 小於 | 4 < 5 |
| <= | 小於或等於 | 4 <= 4 |
| > | 大於 | 3 > 1 |
| >= | 大於或等於 | 2 >= 2 |
有別於前面提到的運算子,等於與不等於運算子可以用來比較任何型別的值。
==運算子用來檢查兩個值是否相等,其中也包含檢查值的型別。
!=的運作方式相同,但如果兩個值不相等就會回傳true,相等則回傳false。
以下是等於與不等於運算子的清單,以及它們得到true值的例子:
| 方法 | 說明 | 範例 |
|---|---|---|
| == | 等於 | 4 == 4 |
| != | 不等於 | 5 != 4 |
if敘述if敘述用來檢查給定的條件是「真值」還是「假值」。
如果條件是真值,if敘述內的程式碼就會執行。
if敘述以end關鍵字作結。
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
unless敘述unless敘述的運作方式與if敘述非常類似,但如果條件是假值,它就會執行unless敘述內的程式碼。
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
else敘述else敘述可以與if敘述搭配使用。
如果if分支沒有執行,就會執行else敘述。
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if」敘述elsif敘述可以與 if 敘述搭配使用。
如果 if 分支沒有執行,且 elsif 敘述的條件為真值,就會執行elsif敘述。
elsif 敘述可以串接在一起,第一個為真值的條件會被執行。
在 if 敘述的最後也可以加上 else 敘述,如果先前沒有任何敘述的條件為真值,它就會執行。
value = 1
if value != 1
"1 is not equal to 1"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"
在這個練習中,你會寫程式來分析汽車工廠裝配線的生產狀況。
裝配線的速度範圍從0(關閉)到10(最高)。
在最慢的速度(1)下,每小時可以生產221輛車。
產量會隨速度呈線性成長。
所以當速度設為4時,每小時應該生產4 * 221 = 884輛車。
不過,速度越高,就越可能生產出瑕疵車,而這些車之後必須被淘汰。
下表說明速度如何影響成功率:
1到4:100% 的成功率。5到8:90% 的成功率。9:80% 的成功率。10:77% 的成功率。你有兩項任務。
實作AssemblyLine#production_rate_per_hour方法,計算裝配線每小時的生產率,並將成功率納入考量。
請注意,回傳的值是Float的實例。
AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4
實作AssemblyLine#working_items_per_minute方法,計算每分鐘生產多少輛完成且可用的車。
請注意,回傳的值是Integer的實例。
AssemblyLine.new(6).working_items_per_minute
#=> 19