🚧分割代入引数 (destructuring assignment parameter)
たとえばBMI(Body Mass Index)を計算したいとします。身長(cm)と体重(kg)が与えられれば関数bmi()は次のような計算になります。
javascriptfunction bmi(height, weight) {const mHeight: number = height / 100.0;return weight / mHeight ** 2;}
javascriptfunction bmi(height, weight) {const mHeight: number = height / 100.0;return weight / mHeight ** 2;}
この関数は引数がどちらも数値型なので、入れ替えてしまう間違いが起こりえます。22は平均的な体型ですが402はややとてつもなく肥満です。
javascriptbmi(170, 65);//=> 22.49134948096886bmi(65, 170);//=> 402.36686390532543
javascriptbmi(170, 65);//=> 22.49134948096886bmi(65, 170);//=> 402.36686390532543
分割代入引数#
このような誤用を避けるための方法として、JavaScriptでは分割代入引数(destructuring assignment parameter)を使うことができます。
javascriptfunction bmi({ height, weight }) {const mHeight: number = height / 100.0;return weight / mHeight ** 2;}
javascriptfunction bmi({ height, weight }) {const mHeight: number = height / 100.0;return weight / mHeight ** 2;}
呼び出しは次のようになります。これならheightとweightの意味を取り違えない限り問題は起こりにくくなるでしょう。また、引数の位置を入れ替えても結果は同じになります。
typescriptbmi({ height: 170, weight: 65 });bmi({ weight: 65, height: 170 });
typescriptbmi({ height: 170, weight: 65 });bmi({ weight: 65, height: 170 });
分割代入引数の型注釈#
TODO
キーの省略#
JavaScriptでは、分割代入引数の名前と同じ変数が定義済みであれば、オブジェクトのキーを省略し、変数だけ渡すことができます。
typescriptconst height = 170;const weight = 65;// beforebmi({ height: height, weight: weight });// afterbmi({ weight, height });
typescriptconst height = 170;const weight = 65;// beforebmi({ height: height, weight: weight });// afterbmi({ weight, height });
分割代入引数のデフォルト値#
TODO
分割代入引数全体のオプショナル化#
TODO