Yuki Matsumoto

To be engneer soon / Ruby on Rails

Rubyの基礎をメモってみる(その3:メソッドの定義について)

2019-02-28 Yuki MatsumotoRuby

メソッドの定義について学んだことをメモ程度に書いてみる。今回もプロを目指す人のための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章が終了します。明日はまだカバーしきれていない基礎知識についてまとめます。