関数はJavaScriptの中心です。 以前はfunctionキーワードの使用に制約がありましたが、ES6では、アロー関数と呼ばれる新しい、よりエレガントな書き方が導入されました。 この新しい構文はコードを短くするだけでなく、thisコンテキストに関連するいくつかの問題も解決します。 このガイドでは、Arrow関数について知っておく必要があるすべてを学びます。
主なポイント
- Arrow関数は従来の関数と比べてシンタックスが短くなります。
- 独自のthisコンテキストを持たないため、コールバック関数で特に便利です。
- 関数が1つの式しか返さない場合は、波括弧とreturnステートメントを省略できます。
Arrow関数の紹介
Arrow関数はコードを読みやすく、コンパクトにするために通常使用されます。 functionの代わりに新しい構文を使用して関数を簡潔に宣言できます。
Arrow関数の概念を理解するために、従来の関数を出発点として使用することができます。 functionキーワードで関数を宣言すると、通常、すこし長くてエレガントでないことが多いです。 これはJavaScriptの標準関数の例です:
これがArrow関数に移行するための出発点です。
ステップ1:Arrow関数の宣言
functionキーワードの代わりに、単にパラメーターを括弧で囲み、矢印を使ってその後に関数本体を書くだけです。 ここでは、前述の関数がArrow関数としてどのように見えるかを示します:
ご覧の通り、この構文ははるかにコンパクトです。 最初の試みの後、関数が正しく動作しているかどうかを確認できます。
ステップ2:配列とのArrow関数の使用
Arrow関数のもう1つの大きな利点は、配列との使用時に現れます。 例を見てみましょう。 いくつかの数字の配列があり、特定の数字の位置を見つけたい場合を考えてみましょう。 ここでは、findIndexメソッドを使用してインデックスを見つける例を示します:
Arrow関数はコードの可読性を大幅に向上させ、追加のfunctionキーワードの必要性を減らします。
ステップ3:Arrow関数の短縮
Arrow関数には1つの式しかない場合、波括弧とreturnキーワードを省略することができます。 findIndex関数をさらに短くする場合は次のようになります:
これは短く、またエレガントです。 関数をテストして、それが依然として正常に動作していることを確認できます。
ステップ4:thisキーワードの処理
Arrow関数の非常に重要な利点の1つは、thisコンテキストの扱い方です。 通常の関数では、コールバックとして使用される場合、thisは予測不能になることがよくあります。 一方、Arrow関数は、定義されたコンテキストにthisをバインドします。
以下の例をご覧ください:
obj.print(); // "Text"が出力されます
ただし、通常の関数をsetTimeout内で使用すると、thisのコンテキストが変更されます:
setTimeout内でArrow関数を使用すると、クラシック関数と同じ結果が得られますが、コンテキストが失われることはありません:
ステップ5:thisの割り当てを維持する
変数にthisをバインドして、アクセスできるようにすることもできますが、Arrow関数を使用するよりもこのパターンはしばしばエレガントではありません。
アロー関数の利点
- 従来の関数宣言と比較して、短くてエレガントです。
- Callback関数での使用が容易になる、独自のthisコンテキストを持ちません。
- この構文を使用すると、コードをはるかに読みやすくすることができます。
要約
アロー関数は、JavaScriptの関数を効率的に宣言する便利な方法を提供します。新しい構文により、可読性が向上し、thisコンテキストの処理も大幅に簡略化されます。コールバック関数や短い関数式が必要な場合は、特にアロー関数を使用するべきです。