|
JavaScript 2.0
根拠
名前付き引数
|
01/29/2003 (Wed)
名前付き引数は元々 JavaScript 2.0 草案に含まれていたが、JavaScript 2.0 の軽量化のために将来のバージョンに見送られた。実装されるとしたら名前付き引数は本節で述べるような振る舞いをしていた。
[訳注: このドキュメントはコア言語の「関数」から分離されたものである。同ドキュメントも参照すると良い。]
名前付き引数を使用すると、関数に引数を渡すときに、その位置ではなく名前を使って引数を渡すことができるようになる。この名前は単純な文字列である。3つの (名前付き引数に対して) 位置固定引数 (その内1つは省略可能) と4つの名前付き引数を持つ関数宣言は次のようになる:
function f(a: Number, b: Boolean, c: Number = 5, named x: Integer = 7, named y = null, named z = 34, named t = undefined)
この関数を呼び出すには次のようにする:
f(2, true, y: 5); f(2, true, 8, z: 32, x: 9);
名前付き引数は常に省略可能でありデフォルト値を持たなければならない。関数呼び出しにおいて、名前付き引数は位置固定引数の後ろに置くことができる。位置固定仮引数は位置固定実引数にのみ一致し、名前付き仮引数は名前付き実引数にのみ一致する。1つの仮引数を位置固定、名前付きの両方にすることはできない。
以下の節では名前付き引数の導入に伴う変更について詳しく説明する。
新しい非予約語 named を追加する。このキーワードは識別子としても正しいものである:
関数の引数は最初に0以上の位置固定引数、その次に1つ以下の残余引数、0以上の名前付き引数、或いは最初に0以上の位置固定引数、その次に1つの名前付き残余引数のいずれかである:
個々の引数の形式は次のようになる:
named NamedParameterCoreParameter の後に =
がある場合、その引数は省略可能である。関数呼び出し時に省略可能な引数に対して実引数を与えなかった場合、この引数には
AssignmentExpression
の値が設定され、必要に応じて仮引数の型に暗黙の強制型変換される。
仮引数の前に named がある場合、その引数はその位置ではなく名前を使って探索される。名前付き引数は常に省略可能であり、初期化子を持たなければならない。
同じ名前で異なる引数リストを持つ2つの関数を定義するとエラーになる。
名前付き引数を持つ関数がチェック無しの関数になることはない。
... がある場合は、関数は仮引数リストのいずれにも合致しなかった実引数を受け取る。仮引数が ...
より後方に与えられた場合、その引数の識別子は残りの全ての引数を格納した配列に束縛される。この識別子は引数の型 (デフォルトは
Array) で local 宣言される。残余引数が named であればその引数の型は常に Array
であり、明示的に型を指定することはできない。
残りの位置固定引数は0から始まる数値の添字を持つ残余配列に要素として格納される。残余引数が named
でない場合、名前付き引数が他に残っていてはならない。named
であれば名前付き引数は残っていてもよく、残余配列の名前付きプロパティとして格納される。
以下のリストは関数が呼ばれたときの FunctionDefinition 中のそれぞれの式の評価順序を表したものである。この処理は全ての引数の名前と値が評価された後でのみ行われる。
arguments
を全引数を格納した配列に束縛し名前も付ける。undefined を代入する。添字演算子、関数呼び出し演算子である a[args]
、f(args) は名前付き引数のために以下のように拡張される:
1つの実引数リストには位置固定引数と名前付き引数の両方を含めることができる。位置固定引数はカンマで区切られた部分式の形で ListExpressionallowIn に含められる。名前付き引数にはオブジェクトリテラルと同じ構文を使い、数字だけで構成されるものでなければあらゆる文字列を引数の名前に使うことができるが、同じ名前が2つあってはいけない。名前付き実引数は位置固定実引数の後ろに置かなければならないが、名前付き引数同士の順序はどのようになっていてもよい。
|
Waldemar Horwat 最終更新: 2003年1月29日 (水) |