t-nissieの日記: 【電脳】名前付き引数 3
日記 by
t-nissie
名前を書き間違えてもエラーにならないような言語仕様だと困る。
foo() # デフォルト
foo(size1:='a4',size2:='b4') # オプションを名前付き引数で指定
foo(sizel:='a4',size2:='b4') # 書き間違い
size1をsizelと書き間違えているのに気がつかず、どうしても
デフォルトの動作をしてしまうというバグに悩むのはいやだ。
ここらへんのことは各言語でどう考えられているのか?
Pythonの場合 (スコア:1)
Pythonには名前付き引数みたいな「キーワード引数」というものがありますが、どんなキーワード引数を渡されるかは強制できないし、もちろんデフォルト値も指定できません。
つまり、仕掛けは用意するけどどう扱うかはプログラマが決めることであって処理系のあずかり知るところではない、というわけです。
Re:Pythonの場合 (スコア:1)
Pythonのような実装が自由度が高いとは思うのですが、
コマンド・ライン・オプションのような使い方をする
場合が多いと思うので、日記に書いたように「名前」
の書き間違いはバグとして扱ってほしいと思いました。
関数の引数をすべて名前付き引数にしてしまったら、その
プログラミング言語は使いにくくなってしまうのでしょうか。
love && peace && free_software
t-nissie
Re:Pythonの場合 (スコア:1)
訂正です。
Pythonの関数引数はキーワード引数でなくても「名前付き引数」みたいな性質を持ってました。
たとえば
という関数fooがあった場合、
みたいに、関数定義での引数の順番に従って値を渡すこともできますが、
みたいに、関数定義での引数の順番を無視して、引数の名前を明示して値を渡すこともできます。
# 大昔にチュートリアルで読んだような記憶もありますが、実践で使ったことが一度も無いので綺麗に失念してましたorz。
一方、引数の名前をスペルミスして
と書いてしまうと、「関数foo()が予期しないキーワード引数を受け取った」という実行時エラーになります。