基礎

Rubyのメソッド入門|定義方法・引数・戻り値の基本を徹底解説

メソッドは処理をまとめて名前を付けたもので、何度でも呼び出して再利用できます。同じ処理を何度も書く必要がなくなり、コードの重複を減らしてプログラムを整理できます。Rubyではdefキーワードでメソッドを定義します。

基本的な使い方

メソッドの定義と呼び出し

Ruby
def greet
  puts 'こんにちは!'
end

# メソッドの呼び出し
greet
greet
実行結果
こんにちは!
こんにちは!

def メソッド名で始まりendで終わる間にメソッドの処理を記述します。定義したメソッドは名前を書くだけで呼び出せます。

引数のあるメソッド

メソッドに値を渡すことで、呼び出すたびに異なる処理を行えます。

Ruby
def greet(name)
  puts "こんにちは、#{name}さん!"
end

greet('太郎')
greet('花子')
greet('Ruby')
実行結果
こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、Rubyさん!

複数の引数

Ruby
def introduce(name, age, city)
  puts "名前: #{name}"
  puts "年齢: #{age}歳"
  puts "出身: #{city}"
  puts '---'
end

introduce('太郎', 25, '東京')
introduce('花子', 22, '大阪')
実行結果
名前: 太郎
年齢: 25歳
出身: 東京
---
名前: 花子
年齢: 22歳
出身: 大阪
---

戻り値

Rubyのメソッドは最後に評価された式の値を自動的に返します。returnを明示的に書くことも可能です。

Ruby
# 最後の式が戻り値になる(暗黙のreturn)
def add(a, b)
  a + b
end

# returnを明示的に書く
def multiply(a, b)
  return a * b
end

result1 = add(3, 5)
result2 = multiply(4, 6)

puts "3 + 5 = #{result1}"
puts "4 x 6 = #{result2}"
実行結果
3 + 5 = 8
4 x 6 = 24

Rubyでは暗黙のreturn(最後の式の値が戻り値になる)が一般的です。returnは主にメソッドの途中で早期に値を返したい場合に使います。

デフォルト引数

引数にデフォルト値を設定すると、呼び出し時に省略できます。

Ruby
def greet(name, greeting = 'こんにちは')
  puts "#{greeting}、#{name}さん!"
end

greet('太郎')                # デフォルト値を使用
greet('花子', 'おはよう')     # 値を指定
実行結果
こんにちは、太郎さん!
おはよう、花子さん!

実践的な使い方

Ruby
# 税込価格の計算メソッド
def calc_tax_price(price, tax_rate = 0.10)
  (price * (1 + tax_rate)).floor
end

# BMI計算メソッド
def calc_bmi(weight, height_cm)
  height_m = height_cm / 100.0
  bmi = weight / (height_m ** 2)
  bmi.round(1)
end

# 成績判定メソッド
def grade(score)
  case score
  when 90..100 then 'A'
  when 80..89 then 'B'
  when 70..79 then 'C'
  when 60..69 then 'D'
  else 'F'
  end
end

puts "1000円(税込): #{calc_tax_price(1000)}円"
puts "1500円(税込8%): #{calc_tax_price(1500, 0.08)}円"
puts "BMI: #{calc_bmi(70, 175)}"
puts "85点の評価: #{grade(85)}"
puts "55点の評価: #{grade(55)}"
実行結果
1000円(税込): 1100円
1500円(税込8%): 1620円
BMI: 22.9
85点の評価: B
55点の評価: F

真偽値を返すメソッド

Ruby
# 真偽値を返すメソッドは?で終わる慣例
def adult?(age)
  age >= 18
end

def empty_string?(str)
  str.nil? || str.strip.empty?
end

puts adult?(20)
puts adult?(15)
puts empty_string?('  ')
puts empty_string?('hello')
実行結果
true
false
true
false
メソッド名の慣例

Rubyではメソッド名にスネークケースを使います。真偽値を返すメソッドは?で終わる(empty?include?)、破壊的メソッドは!で終わる(sort!upcase!)という慣例があります。

putsの戻り値はnil

putsは出力はしますが戻り値はnilです。メソッドの最後の行にputsを書くと、そのメソッドの戻り値がnilになります。値を返したい場合はputsとは別に値を記述しましょう。

まとめ

  • def メソッド名...endでメソッドを定義する
  • 引数でメソッドに値を渡し、デフォルト引数も設定できる
  • 最後に評価された式の値が暗黙的に戻り値になる
  • 真偽値を返すメソッドは?で終わる慣例がある
  • メソッドで処理をまとめることでコードの重複を減らせる