キーワード引数

有名どころのブログでパラメータのプロパティ渡しというテクニックが紹介されてました。

 var f:Fish = new Fish(2, 180, 20, 20, 16, 40);

 C++とかJavaで良く見るプログラミングスタイルだが、こうやってひたすら数字だけが並んでいるとやたらと読みにくい。三日後に見たらどのパラメーターが何なのかが思い出せなくて、コンストラクターソースコードを参照せねばならない。

これを、JSONで使われるようなObjectリテラルを用いて、

 var f:Fish = new Fish({speed:2, direction:180, x:20, y:20, minDistance:16, maxInfluence:40});

と書けるようにすることが提案されています。それぞれの引数が何を意味するのかこれで一目瞭然です。
しかし、これには欠点があって、(著者も指摘していますが)実行効率が悪くて、コンパイラでエラーも捕捉できません。

ご存知の通りcurlであればキーワード引数が言語レベルでサポートされているため、

  let f:Fish = {Fish speed=2, direction=180, x=20, y=20, minDistance=16, maxInfluence=40}

のように専用の構文で記述することができます。当然スペルミスをしたり、誤った型を指定したりした場合はコンパイルエラーになります。引数の順番も任意でよくなり、既定値を使う場合は省略も可能です。キーワード引数の有り難味を改めて実感。


404 Blog Not Foundにもこの記事に対するコメントがありました。

その最後に、

それにしても、不思議なのはなぜGUIプログラムの現場がもっと大声で文句を言わなかったかということ。MacにしろWindowsにしてもXにしても

functionNamesLikeThisThatNoOneCanRemember(a, list, of, parameters, that, are, too, many, to, remember, its, order, and, prototypes);

みたいな奴のオンパレードでしたから。

確かに、どうしてもプロパティの類が多くなってしまうGUIのプログラムで、キーワード引数のような仕様のあるなしは地味だけど大きく影響しそう。curlという言語がキーワード引数をサポートしているのも、比較的後発のプログラミング言語であり、過去の教訓が生かされている証でしょうか。