Rubyでよく使われる数値の型は、次の2つです。
-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には、制御フロー式と呼ばれるものがあります。これはプログラムの実行の仕方を制御するために使われ、真とみなされる値か偽とみなされる値をとります。 真とみなされる値や偽とみなされる値を作るために使える演算子があり、これらは比較演算子と呼ばれます。
どのコードが実行され、どれが実行されないかを制御する主な制御式が2つあります。言い換えると、どの分岐が実行されるかです。
その2つとは、if式とunless式です。
比較演算子は、値を比較してtrueまたはfalseを返すために使われます。
以下の演算子は、比較する2つの値が同じ型であることを必要とします。
値が同じ型でない場合、コンパイラーはエラーを投げます。
演算子の一覧と、trueを返す例を次に示します:
| メソッド | 説明 | 例 |
|---|---|---|
| < | より小さい | 4 < 5 |
| <= | 以下 | 4 <= 4 |
| > | より大きい | 3 > 1 |
| >= | 以上 | 2 >= 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文と組み合わせて使うことができます。
else文は、ifの分岐が実行されない場合に実行されます。
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文と組み合わせて使うことができます。
elsif文は、ifの分岐が実行されず、かつ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)では、1時間に221台の車が生産されます。
生産量は速度に比例して増加します。
そのため、速度を4に設定すると、1時間に4 * 221 = 884台の車を生産することになります。
ただし、速度が上がるほど、欠陥のある車が生産される可能性が高くなり、そうした車は廃棄しなければなりません。
次の表は、速度が成功率にどのように影響するかを示しています。
1から4:成功率100%。5から8:成功率90%。9:成功率80%。10:成功率77%。タスクは2つあります。
AssemblyLine#production_rate_per_hourメソッドを実装して、成功率を考慮した組み立てラインの1時間あたりの生産率を計算します。
戻り値はFloatのインスタンスであることに注意してください。
AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4
AssemblyLine#working_items_per_minuteメソッドを実装して、1分あたりに完成した、正常に動作する車が何台生産されるかを計算します。
戻り値はIntegerのインスタンスであることに注意してください。
AssemblyLine.new(6).working_items_per_minute
#=> 19