こんにちは、アルバイトの栃沢です。

rubyのメソッドにデフォルト値を与える方法を説明します。

rubyにはデフォルト値を与える書き方にはキーワード引数とデフォルト式という書き方があります。

デフォルト式

まず、デフォルト式から解説します。

以下のコードをご覧ください。

def hello(obj = "hello world" )
  puts obj
end
hello #=> hello world

これを実行するとhello worldと表示されます。

メソッドを呼び出した時に指定した引数は、メソッド側で先頭から順に代入されていきます。

メソッドを呼び出す際に引数に何も与えないとデフォルトの値が出力されます。

またデフォルト値を指定する場合、全ての引数に対して指定する必要はありません。

def name(first_name = "tanaka", last_name = "souta")
  puts "my name is #{first_name} #{last_name}"
end
name("satou") #=> satou souta

この場合、先頭側から順に代入されるので

first_nameはsatouとなり、last_nameがデフォルトで設定してあるsoutaとなります。

my name is satou soutaと出力されます。

キーワード引数

次にキーワード引数について説明します。

以下のコードをご覧ください。

def name(first_name: "tanaka", last_name: "jirou")
  puts "my name is #{first_name} #{last_name}"
end
name #=> tanaka jirou
name(first_name: "yasuda", last_name = "tomoki") #=> yasuda tomoki

デフォルトの値を与える時にデフォルト式の場合は=でしたが、キーワード引数の場合はコロン(:)です。

デフォルト式と同様に引数に何も与えないとデフォルトの値が呼び出されます。

そのため、引数指定しないとmy name is tanaka jirouと出力されます。

その下のname(first_name:'satou', last_name:"tomoki")ではmy name is satou tomokiと出力されます。

またデフォルト値を指定する場合、全ての引数に対して指定する必要はありません。

しかし、デフォルト式と異なり呼び出す際には メソッド名(変数名:デフォルトの値) のように呼び出します。

僕は普段デフォルト式で書いていますが、キーワード引数の方がメソッドを呼び出す際に変数名を

書いて呼び出すため、ぱっと見た時に理解しやすいコードになるのではないかと思います。