for文による条件分岐(続き)
for文の中で処理を中断したり、次のループに移る処理を加えることができる。
sample_01.rb
money = 100
for year in 1..30
money *= 1.05
# 「money」の値が300を超えたら処理終了
break if money > 300
# 「money」の値が200未満の場合は次のループ文にスキップ
next if money < 200
puts "Year #{year}: #{money}"
end
以下に注意
break:反復処理全体を終了させる命令。
next:次の反復処理に移る命令。
三項演算子
Excelにおけるif文と似ており、構文としては、「条件 ? [trueの場合の処理] : [falseの場合の処理]」となる。
sample_02.rb
score = gets.to_i
result = score > 80 ? "A" : "B"
puts result
メソッドの実装
Rubyのメソッドでは最後に評価された値が自動的に戻り値となるため、以下の例では「return」は省略できる。
sample_03_01.rb
def triple(num) # 仮引数
return num * 3
end
puts triple(10) # 実引数
上の例のような場合は、「return」ではなく「puts」としてメソッドを単に呼び出すだけで戻り値を表示することもできる。
sample_03_02.rb
def triple(num)
puts num * 3
end
triple(10)
この場合、値を表示した後に「nil」として評価されるため、それが戻り値となる。
そのため、戻り値を使ってさらに演算することが難しくなる。
戻り値として「true」か「false」を返すメソッド
戻り値として「true」か「false」を返すメソッドの場合、慣習上メソッド名に「?」を付ける。
sample_04_01.rb
def dividable?(a, b)
if b != 0 && a % b == 0
true
else
false
end
end
puts dividable?(10, 2) # true
puts dividable?(10, 3) # false
puts dividable?(10, 0) # false
割る値(b)が0の場合にfalseとなるif文を先に書いておく方法もある。
このようなテクニックを「早期リターン」という。
イレギュラーなパターンの条件分岐を先に書いておくことで、それ以外の条件分岐に集中できるという考え方である。
sample_04_02.rb
def dividable?(a, b)
if b == 0
return false # 早期リターン
end
if a % b == 0
true
else
false
end
end
puts dividable?(10, 2) # true
puts dividable?(10, 3) # false
puts dividable?(10, 0) # false
仮引数について
仮引数には初期値を設定することができる。
sample_05.rb
def get_total(price, amount, rate = 1.1)
price * amount * rate
end
puts get_total(100, 10)
puts get_total(120, 10, 1.08)