アロー関数 — *短くて強力な*構文
アロー関数 — *短くて強力な*構文
🎯 このレッスンを読み終えたら
このレッスンを読み終えると、以下の3つを自信を持ってできるようになります。
- ▸✅ アロー関数の
thisバインディング (レキシカルスコープ) - ▸✅
functionキーワードを必ず使わなければならない場合 - ▸✅ 暗黙的 return + 1行式の書き方
学習目標をチェックリストとして手元に置き、すべて答えられるようになったらレッスンを閉じましょう。
アロー関数の5つの構文パターン
核心を一言で
アロー関数 = ES6 (2015) から追加された短い関数構文。シンプルな関数式でははるかにすっきり書けます。
5つの構文バリエーション
console.log(doubleShort(5)); // 10
// 4️⃣ ブロック — { } を使うとreturn明示必須
const doubleBlock = x => {
return x * 2;
};
console.log(doubleBlock(5)); // 10
// 5️⃣ オブジェクトリターン — 括弧で囲むのが重要!
const makeOk = () => ({ name: "ホン" }); // ✅ ( ) で囲む → オブジェクトを返す
const makeBad = () => { name: "ホン" }; // ❌ { } がブロックとして解釈される → undefined
console.log(makeOk()); // { name: "ホン" }
console.log(makeBad()); // undefined ← 🙀 オブジェクトではなく「空のブロック」として認識
javascript// 1. thisを自身で保持しない
const obj = {
name: "ホン",
greet: () => console.log(this.name) // undefined (周囲のthis)
};
// 2. コンストラクタではない
const Foo = () => {};
new Foo(); // TypeError
// 3. argumentsを持たない
const fn = () => console.log(arguments); // ReferenceError
// 代わりに: const fn = (...args) => console.log(args);
javascript// ❌ 昔のやり方 — setTimeout内のthisが異なる
class Counter {
constructor() {
this.count = 0;
}
start() {
setTimeout(function() {
this.count++; // this = window/undefined
}, 1000);
}
}
// ✅ アロー関数 — thisがCounterインスタンスのまま
class Counter {
constructor() {
this.count = 0;
}
start() {
setTimeout(() => {
this.count++; // this = Counterインスタンス ✅
}, 1000);
}
}
javascript// 昔のやり方
const oldWay = [1, 2, 3].map(function(n) { return n * 2; });
console.log(oldWay); // [2, 4, 6]
// アロー関数 — 圧倒的に短い (同じ結果)
const newWay = [1, 2, 3].map(n => n * 2);
console.log(newWay); // [2, 4, 6]
// チェイニング — filter → map → sort
const users = [
{ name: "Alice", age: 30 },
{ name: "Bob", age: 15 },
{ name: "Charlie", age: 22 }
];
const adultNames = users
.filter(u => u.age >= 18) // ① 成人のみ (Alice, Charlie)
.map(u => u.name) // ② 名前だけ抽出
.sort(); // ③ アルファベット順
console.log(adultNames); // ["Alice", "Charlie"]
``
関数型プログラミングのパターンが格段に読みやすくなります。これがモダン JS が簡潔な理由です。
まとめ
- ▸アロー関数 = 簡潔な関数式
- ▸自身の this` を持たない — 周囲のコンテキストを使用 (ほとんどの場合、意図した動作)
- ▸クラスメソッド・コンストラクタには通常の関数を使用
- ▸コールバック・チェーニングにはアロー関数を使用
⚡ 実際に試してみよう — アロー関数の落とし穴 (オブジェクトの返却)
🤖 AIにこう依頼してみましょう
このレッスンの概念を理解すると、AIに具体的な指示を出せるようになります。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。
- ▸「この関数宣言をアロー関数に変換して、
thisバインディングの違いを確認して」 - ▸「この関数を純粋関数にリファクタリング (副作用を除去) して」
- ▸「この関数に適切なデフォルト引数と分割代入を適用して」
なぜこれでトークンが減るのか
概念を知らないと、AIの回答を受け取ってもまた「それって何ですか?」と聞き直す必要があります。その「聞き直し」がトークンを消費します。概念を一度覚えておけば、会話が一回で終わります。