【あろーかんすう】

アロー関数 とは?

💡 矢印ひとつで関数を「サクッと」書く記法
📌 このページのポイント
従来の関数 vs アロー関数 従来の関数 function add(a, b) { return a + b; } アロー関数 const add = (a, b) => a + b; 省略パターン 引数1つ→()省略 x => x * 2 1行→return省略 (a, b) => a + b thisが固定される 外側のthisを継承 => がアロー(矢印)。短く書けるのが特徴!
アロー関数のイメージ
ひよこ ひよこ

アロー関数って普通の関数と何が違うの?

ペンギン先生 ペンギン先生

まず書き方が短くなるよ。「function(x) { return x * 2; }」が「(x) => x * 2」になる。引数が1つなら括弧も省略できて「x => x * 2」とさらに短い。特にmap関数コールバックなんかで使うとコードがスッキリするんだ。

ひよこ ひよこ

短いだけ?他にも違いがあるの?

ペンギン先生 ペンギン先生

一番大きな違いは「this」の扱いだよ。通常のfunctionはその関数が呼ばれた場所でthisが決まるけど、アロー関数は定義された場所のthisをそのまま使うんだ。クラスのメソッドの中でsetTimeoutを使うときなど、thisがずれて困る場面でアロー関数を使うと問題を回避できるよ。

ひよこ ひよこ

アロー関数にデメリットはないの?

ペンギン先生 ペンギン先生

thisを持たないから、オブジェクトメソッドとして定義するときには注意が必要だよ。あとargumentsオブジェクトも使えない。それから短く書けるからといって、複雑なロジックを1行に詰め込むと読みにくくなる。コードの可読性を犠牲にしてまで短くするのは本末転倒だから、適度に改行や波括弧を使おうね。

ひよこ ひよこ

TypeScriptだとアロー関数の書き方って変わるの?

ペンギン先生 ペンギン先生

基本は同じだけど、型注釈が付くよ。「const add = (a: number, b: number): number => a + b;」のように引数と戻り値に型を書く。ジェネリクスを使うとき「<T>(x: T) => x」がJSXの<T>タグと混同されてエラーになることがあるんだ。その場合は「<T,>(x: T) => x」のようにカンマを追加するか、function宣言を使う。これはTypeScript + JSX環境ならではのハマりポイントだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アロー関数」って出てきたら「矢印記号で関数を短く書けるJavaScriptの書き方だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「arrow function」 = 矢印関数
💬 「=>」の形が矢印(arrow)に見えることから名付けられたよ
← 用語集にもどる