メソッドは処理をまとめて名前を付けたもので、何度でも呼び出して再利用できます。同じ処理を何度も書く必要がなくなり、コードの重複を減らしてプログラムを整理できます。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 = 24Rubyでは暗黙の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でメソッドを定義する- 引数でメソッドに値を渡し、デフォルト引数も設定できる
- 最後に評価された式の値が暗黙的に戻り値になる
- 真偽値を返すメソッドは
?で終わる慣例がある - メソッドで処理をまとめることでコードの重複を減らせる