讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby】メソッドについて詳しく~part1~

はじめに

メソッドの命名やメソッド内での戻り値、特にreturn構文の利用の際に気をつけることは下記の記事にて紹介しているので興味がある方はご覧ください。

www.sanuki-kozo.com

今回は、前回より少し詳しめにメソッドについて書いていこうと思います。

引数の数が揃わない場合はエラーとなる

例えば下記の良ようなコードの場合。
additionメソッドを呼び出した際にはa,bの2つ渡していますが、

def addition(a) ・・・一つしか引数を受け入れていない
  a  + b
end

a = 3
b = 4

addition(a, b)

addition.rb:3:in addition': wrong number of arguments (given 2, expected 1) (ArgumentError) from count.rb:11:in

'

こんなのもダメ

def addition(a)
  a  + b
end

addition() ・・・一つも渡していない

additon.rb:3:in addition': wrong number of arguments (given 0, expected 1) (ArgumentError) from count.rb:10:in

'

デフォルト値付きで引数をセットできる

Rubyメソッドではあらかじめ引数に値をセットする事ができます。
下記の例だとadditionメソッドを呼び出した時点で何も値を渡していませんが、初期値にa=3, b=4と設定されているのでエラーにならずに実行されます。

def addition(a=3, b=4)
  a  + b
end

puts addition()

7

ただしデフォルト値をセットしていても、呼び出し時に渡した値が優先されます。
下記の例では呼び出し時にa=5, b=5を渡しているので、デフォルト値は無視されて10が帰ってきます。

def addition(a=3, b=4)
  a  + b
end

a = 5
b = 5

puts addition(a, b)

10

基本的かもしれませんがこのあたり小僧は知りませんでした。
やはり本を精読するとこういう抜け漏れを確認できるのでいいですね。

デフォルト値を持つものと持たないものを同時に渡す事ができる

下記のサンプルではa=5のデフォルト値付きの引数とプレーンなbを渡しています。
そのメソッドに対して、メソッドを呼び出した際に5のみを渡してみます。

def addition(a=5, b)
  a  + b
end

puts addition(5)

10

10が帰ってきました。
そう、この場合は、デフォルト値のないbに値が渡されaのデフォルト値の5と、bに渡された5の足し算で10が帰りました。

そのため仮にこれが逆で、下記のようなコードでも10が返ります。

def addition(a, b=5)
  a  + b
end

puts addition(5)

ちょっと長くなりそうなので今回はここまで

最後に

この記事はプロを目指す人のためのRuby入門から学んだことを参考にして内容が作られています。

Rubyを本格的に勉強したいと考えられている方は是非、下記リンクに書籍のリンクを貼っているので確認してみてください。