【ITニュース解説】Javascript - arrow function
2025年09月09日に「Dev.to」が公開したITニュース「Javascript - arrow function」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
JavaScriptのアロー関数は、従来のfunctionキーワードより短く関数を記述できる構文。ES6で導入され、コードが簡潔で読みやすくなるため、特に無名関数やコールバック関数で活用される。
ITニュース解説
JavaScriptにおける関数は、特定の処理をひとまとまりにしたものであり、プログラミングの基本的な構成要素である。プログラム内で同じような処理を何度も書く代わりに、関数として定義しておくことで、コードの再利用性が高まり、可読性も向上する。JavaScriptにはいくつかの関数の定義方法が存在するが、近年主流となっているのが「アロー関数」である。これはES2015(通称ES6)というバージョンのJavaScriptで導入された、関数をより短く、そして直感的に記述するための新しい構文だ。
従来、JavaScriptで関数を定義する際はfunctionというキーワードを使用するのが一般的であった。例えば、二つの数値を受け取ってその合計を返す関数は、function add(a, b) { return a + b; }のように記述される。これは関数の基本形であり、関数名、引数リスト、そして波括弧{}で囲まれた処理本体で構成される。この形式は今でも有効であり、多くの場面で使われている。しかし、特に一時的に使用するだけの名前のない関数(無名関数)や、他の関数の引数として渡す関数(コールバック関数)を記述する際には、この構文が少し冗長に感じられることがあった。
そこで登場したのがアロー関数である。アロー関数は、functionキーワードを省略し、引数リストの後に=>(アロー、矢印)を記述することで関数を定義する。先ほどのadd関数をアロー関数で書き直すと、const addArrow = (a, b) => a + b;となる。この一行だけで、従来の関数と全く同じ動作をする関数を定義できる。この構文にはいくつかの特徴的なルールがある。まず、関数の処理本体が単一の式で、その評価結果を返すだけであれば、波括弧{}とreturnキーワードを省略できる。これがコードを劇的に短くする最大の利点だ。もし処理が複数行にわたる場合は、従来通り波括弧{}で処理を囲み、値を返す際には明示的にreturnを記述する必要がある。また、引数が一つだけの場合は、引数を囲む丸括弧()も省略可能である。例えば、数値を二乗する関数はconst square = x => x * x;と書ける。引数がない場合は、丸括弧()だけを記述する。
アロー関数の簡潔さは、特にコールバック関数を使用する場面でその真価を発揮する。コールバック関数とは、ある処理が終わった後に実行されるように、別の関数の引数として渡される関数のことだ。例えば、指定した時間差で処理を実行するsetTimeout関数や、配列の各要素に対して繰り返し処理を行うmap関数などが代表的だ。配列の各要素を2倍にした新しい配列を作りたい場合、map関数を使ってconst newArray = oldArray.map(function(item) { return item * 2; });のように記述する。これをアロー関数で書くと、const newArray = oldArray.map(item => item * 2);となり、非常にスッキリと一行で表現できる。functionやreturnといった記述がなくなることで、mapが配列の各要素itemをitem * 2に変換する処理であることが一目で理解できるようになり、コードの可読性が大幅に向上する。
しかし、アロー関数は単に従来のfunctionキーワードの糖衣構文(シンタックスシュガー、より書きやすくしただけのもの)というだけではない。両者には「this」の扱いに関する決定的な違いが存在する。thisは、関数が実行される際の文脈(コンテキスト)によって参照先が変わる特殊なキーワードである。従来の関数では、thisが指すオブジェクトは、その関数がどのように呼び出されたかによって動的に決定される。これに対し、アロー関数は自身のthisを持たない。アロー関数内でthisが使われた場合、それはアロー関数が定義された場所のスコープ、つまり外側の関数のthisをそのまま引き継ぐ。これを「レキシカルスコープ」と呼ぶ。この特性は、オブジェクト指向プログラミングや、イベント処理のコールバック関数内で非常に役立つ。従来は、コールバック関数内で外側のthisを使いたい場合、thisを別の変数に一時退避させたり、.bind(this)メソッドを使ったりする工夫が必要だったが、アロー関数を使えばそうした記述なしに直感的にthisを扱うことができる。ただし、この特性が逆に不都合な場合もある。オブジェクトのメソッドを定義する際に、そのメソッドが所属するオブジェクト自身をthisとして参照したい場合は、アロー関数ではなく従来のfunction構文を使う必要がある。アロー関数を使うと、そのオブジェクトではなく、さらに外側のグローバルオブジェクトなどを参照してしまうからだ。
結論として、アロー関数はJavaScriptにおける関数定義をより簡潔で読みやすくする強力な構文である。特にコールバック関数や配列操作メソッドと組み合わせることで、コードの意図が明確になり、生産性が向上する。一方で、thisの挙動が従来の関数と異なるという重要な特性を正確に理解し、メソッドの定義などでは従来の関数構文を選択するといった、状況に応じた適切な使い分けが求められる。システムエンジニアを目指す上で、このモダンなJavaScriptの標準記法を習得することは、効率的で保守性の高いコードを書くための必須スキルと言えるだろう。