0
0

Rubyの基本(制御構造 Part2 と メソッド)

Last updated at Posted at 2024-02-28

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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0