キーワード引数、名前付き引数(C# ではこう呼ぶらしく、英語では Named Arguments らしい)がなにやらいろんな言語で採用されるらしいが、私も Ruby 2系で「コレいいかもな」と思った仕組みである。
例えば、四角の面積を求める関数があったとして C++ ならば関数定義に int 面積(int width, int height); とし、呼び出し側では area = 面積(10, 30); としてあっても、どっちが幅( width )で、どっちが高さ( height )なのか区別がピンとこない。(サンプルが悪くてどっちでもいいじゃんてのは置いておいて)
これがキーワード引数だと、まぁちょっと仮想言語記述だが呼び出し時に
1
area = 面積(width: 10, height: 30);
とかけるので、ピンとくる。
キーワード引数なしでも似たようなことはできて、
1234
width = 10;
height = 30;
area = 面積(width, height);
みなさんご存知のように古いC言語やC++では、 引数の評価順序は未定義で実装依存 であり「左から右に実行されている」のは直感、たまたまにすぎない。( a = a + 1 と書いて、右辺から評価されることは直感的に受け入れられるよう訓練しても、関数に指定した引数の最後から評価されることは直感的に受け入れられないよな。)
def area(param1: 0, param2: 0)
end
def func1
p 'func1'
end
def func2
p 'func2'
end
area(param1: func1, param2: func2)
area(param2: func2, param1: func1)