デフォルト引数 (default parameter)
引数の値がundefinedのとき、代わりの値を指定できるのがデフォルト引数(default parameter)です。
デフォルト引数の構文
JavaScriptのデフォルト引数は、引数の右に=とデフォルト値を書きます。
js// 関数宣言function関数名 (引数 =デフォルト値 ) {}// アロー関数(引数 =デフォルト値 ) => {};
js// 関数宣言function関数名 (引数 =デフォルト値 ) {}// アロー関数(引数 =デフォルト値 ) => {};
TypeScriptで、型注釈とデフォルト引数の両方を書く場合は、型注釈のほうを先に書きます。
ts// 関数宣言function関数名 (引数 :型 =デフォルト値 ) {}// アロー関数(引数 :型 =デフォルト値 ) => {};
ts// 関数宣言function関数名 (引数 :型 =デフォルト値 ) {}// アロー関数(引数 :型 =デフォルト値 ) => {};
undefinedのときデフォルト値が使われる
JavaScriptの引数は省略するとundefinedになります。
jsfunctionfoo (x ) {console .log (x );}foo ();
jsfunctionfoo (x ) {console .log (x );}foo ();
デフォルト引数は、引数がundefinedのときに、その値が変わりに代入されます。たとえば、次の例の関数呼び出しは、引数を渡していないのでxはundefinedです。そのため、デフォルト値1が代入されます。
tsfunctionfoo (x = 1) {console .log (x );}foo ();
tsfunctionfoo (x = 1) {console .log (x );}foo ();
次のように、引数にundefinedを渡す場合も、デフォルト値が代入されます。
tsfoo (undefined );
tsfoo (undefined );
引数がnullのときは、デフォルト引数は適用されません。ご注意ください。
jsfunctionfoo (x = 1) {console .log (x );}foo (null);
jsfunctionfoo (x = 1) {console .log (x );}foo (null);
引数リストの途中に書ける
JavaScriptのデフォルト引数は、デフォルト値を持たない引数の前に書くこともできます。
jsfunctionfoo (x ,y = 2,z ) {console .log (x ,y ,z );}foo (1,undefined , 3);
jsfunctionfoo (x ,y = 2,z ) {console .log (x ,y ,z );}foo (1,undefined , 3);
初期化処理が書ける
JavaScriptのデフォルト値には式が書けます。
jsfunctionfoo (x = 2 * 2) {}
jsfunctionfoo (x = 2 * 2) {}
式が書けるので、関数呼び出しも書けます。
jsfunctionfoo (x =parseInt ("1.5")) {}
jsfunctionfoo (x =parseInt ("1.5")) {}
非同期処理は書けない
ただし、awaitを使って、非同期関数を呼び出すような処理は書けません。
tsasync function'await' expressions cannot be used in a parameter initializer.2524'await' expressions cannot be used in a parameter initializer.foo (x = awaitPromise .resolve (1)) {}
tsasync function'await' expressions cannot be used in a parameter initializer.2524'await' expressions cannot be used in a parameter initializer.foo (x = awaitPromise .resolve (1)) {}
型推論が効く
TypeScriptでは、デフォルト引数があると、引数の型推論が効きます。そのため、デフォルト引数が型注釈を省略することもできます。
tsfunctionfoo (x = 1) {}
tsfunctionfoo (x = 1) {}
学びをシェアする
・JavaScriptのデフォルト引数は引数がundefinedのとき使われる値
・構文: function 関数名(引数: 型 = デフォルト値) {}
・nullのときはデフォルト値にならない
・引数の途中に書ける
・簡単な初期化処理も書ける
・TypeScriptでは型推論が効く
『サバイバルTypeScript』より