引数のデフォルト値を設定する

引数をつけてメソッドを呼び出すときには呼び出す側とメソッド定義側で引数の数が同じである必要がありますが、メソッド定義側では引数にデフォルト値を設定することができます。デフォルト値が設定されていれば引数を省略できます。ここでは Ruby のメソッドで引数のデフォルト値を設定する方法について解説します。

(Last modified: )

引数のデフォルト値を設定する

メソッドを定義するときに引数にデフォルト値を設定することができます。書式は次のとおりです。

def メソッド名(変数1=デフォルト値1, 変数2=デフォルト値2, ...)
  実行する処理
  実行する処理
end

メソッドを呼び出した時に指定した引数は、メソッド側で先頭から順に変数に代入されていきます。この時、メソッド定義側の変数の数よりも、メソッドを呼び出すときに指定した引数の数の方が少ない場合、デフォルト値が設定されていればその値が代わりに代入されます。

具体的には次のように記述します。

def printHello(msg="No msg", name="No name")
  puts(msg + "," + name)
end

printHello("Hello", "Yamada")
printHello("Hello")
printHello()

今回のサンプルではメソッド呼び出しを3通りの方法で行っています。最初の呼び出しでは引数に 2 つのオブジェクトを指定していますが、メソッド側で受け取る引数も 2 つですのでデフォルト値は使用されず渡されてきたオブジェクトが順に変数に代入されます。

2 番目の呼び出しでは引数に 1 つのオブジェクトを指定しています。メソッド側ではまず渡されてきた 1 つのオブジェクトを最初の変数に代入します。 2 つ目の変数には代入するオブジェクトが渡されてきていませんのでデフォルト値である「No name」が代わりに代入されます。

3 番目の呼び出しでは引数を指定せずにメソッドを呼び出しています。メソッド側では 1 番目の変数にデフォルト値である「No msg」を代入し、 2 番目の変数にデフォルト値である「No name」を代入します。

またデフォルト値を指定する場合、すべての引数に対して指定する必要はありません。よって次のような記述も可能です。

def printHello(msg, name="No name")
  puts(msg + "," + name)
end

printHello("Hello", "Yamada")
printHello("Hello")

上記の場合、 1 番目の引数はデフォルト値が設定されていませんので、少なくとも 1 つの引数を指定してメソッドを呼び出さなければエラーとなります。

またデフォルト値を指定する場合で複数のデフォルト値を設定する場合は、続けて記述する必要があります。例えば 3 つの引数があるメソッドで、 1 番目と 2 番目、 2 番目と 3 番目にデフォルト値を設定するのは問題ありませんが、 1 番目と 3 番目のように離れたところにデフォルト値を設定するとエラーとなります。

次のように 1 番目と 3 番目の引数にデフォルト値を設定した場合はエラーとなります。

def printHello(msg="No msg", name, old=24)
  puts(msg + "," + name + "," + old.to_s)
end

printHello("Suzuki")

1 番目の引数にデフォルト値を指定した上で 2 番目以降の引数にデフォルト値を設定しない場合、

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

def printHello(user="お客", title="様")
  puts(user + title)
end

printHello("佐藤", "さん")
printHello("工藤")
printHello()

下記のように実行して下さい。

引数のデフォルト値

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。