Rubyの基礎をメモってみる(その3:メソッドの定義について)
メソッドの定義について学んだことをメモ程度に書いてみる。今回もプロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ) を参考にしてます。
デフォルト値付きの引数
Rubyではメソッドを呼び出す際に引数が不足するとエラーが起こる。ただし、引数にデフォルト値をつけるとエラーが回避できる。
def メソッド(引数1 = デフォルト値1, 引数2 = デフォルト値2)
# 必須な処理
end
例:
def greeting(country = 'japan')
if country == 'japan'
'こんにちは'
else
'hello'
end
end
greeting # => "こんにちは"
greeting('us') # => "hello"
デフォルト値ありとなしの引数を混在させることも可能
def default_args(a,b,c = 0, d = 0)
'a=#{a}, b=#{b}, c=#{c}, d=#{d}'
end
default_args(1,2) # => "a=1, b=2, c=0, d=0"
default_args(1,2,3) # => "a=1, b=2, c=3, d=0"
default_args(1,2,3,4) # => "a=1, b=2, c=3, d=4"
?で終わるメソッド
Rubyのメソッド名に”?”や”!”をつけることが可能。慣習として”?”で終わるメソッドは真偽値を返すメソッド。
# 空文であればture、そうでなければfalse
".empty? # => true
'abc'.empty? => false
# 引数の文字列が含まれればtrue、そうでなければfalse
'watch'.include?('at') => true
'watch'.include?('in') => false
意図的に真偽値を返したいメソッドであれば”?”を使う方がいい
def multiple_of_three?(n)
n % 3 == 0
end
multiple_of_three?(4) # => false
multiple_of_three?(5) # => false
multiple_of_three?(6) # => true
!で終わるメソッド
”!“で終わるメソッドは慣習として使用する時は注意が必要という意味を持ちます。
a = 'ruby'
# upcaseだと変数aの値は変化しない
a.upcase # => "RUBY"
a # =>'ruby'
# upcase!だと変数aの値も大文字に変わる
a.upcase # # => "RUBY"
a # => "RUBY"
※upcase!メソッドのように呼び出したオブジェクトの状態を変更してしまうメソッドのことを破壊的メソッドと呼びます。
まとめ
今回はメソッド定義についてまとめてみました。あと1チャプターで2章が終了します。明日はまだカバーしきれていない基礎知識についてまとめます。