アロー関数の書き方を覚えよう

学習の目標

本章では、以下の内容を学習します。

  • アロー関数の基本構文を理解する
  • 通常の関数とアロー関数の違いを学ぶ
  • アロー関数の短縮記法の使い方を習得する
  • アロー関数を使うべき場面を理解する

はじめに

これまでの章では、function文を使った関数の作り方を学んできました。JavaScriptには、同じ機能を持ちながら、より短く書くことができるアロー関数という書き方があります。

アロー関数は、ES6(ECMAScript 2015)という新しいJavaScriptの標準で追加された機能です。矢印(=>)を使って関数を定義するため、「アロー関数」と呼ばれています。

特に短い処理を書く場合や、後で学ぶ配列のメソッドと組み合わせる場合に、アロー関数はとても便利です。まずは基本的な書き方から一緒に学んでいきましょう。

アロー関数の基本構文

アロー関数の基本的な書き方は以下のようになります。

const 関数名 = (引数) => {
    // 処理
};

まずは簡単な例で、通常の関数とアロー関数を比較してみましょう。VS Codeで新しいHTMLファイルarrow-function-test.htmlを作成してください。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>アロー関数のテスト</title>
</head>
<body>
    <h1>アロー関数のテスト</h1>
    
    <script>
        // 通常の関数宣言
        function sayHello1() {
            console.log("こんにちは(通常の関数)");
        }
        
        // アロー関数
        const sayHello2 = () => {
            console.log("こんにちは(アロー関数)");
        };
        
        // 両方の関数を呼び出す
        sayHello1();
        sayHello2();
    </script>
</body>
</html>

このHTMLファイルを保存してブラウザで開き、開発者ツールのConsoleを確認してください。以下のような表示が現れるはずです。

こんにちは(通常の関数)
こんにちは(アロー関数)

どちらの関数も同じ動作をしますが、アロー関数の方が少し短く書けることが分かります。

アロー関数の構造を理解しよう

アロー関数の構造を詳しく見てみましょう。

const sayHello2 = () => {
    console.log("こんにちは(アロー関数)");
};
  • const sayHello2 = の部分で、関数を変数に代入しています
  • () の部分は引数を書く場所です(今回は引数なしなので空)
  • => がアロー関数の特徴的な記号です
  • {} の中に実行したい処理を書きます
  • 最後に;(セミコロン)を付けます

引数があるアロー関数

次に、引数があるアロー関数を作ってみましょう。HTMLファイルに以下のコードを追加してください。

<script>
    // 通常の関数(引数あり)
    function greet1(name) {
        console.log("こんにちは、" + name + "さん(通常の関数)");
    }
    
    // アロー関数(引数あり)
    const greet2 = (name) => {
        console.log("こんにちは、" + name + "さん(アロー関数)");
    };
    
    // 両方の関数を呼び出す
    greet1("田中");
    greet2("佐藤");
    
    // 複数の引数があるアロー関数
    const add = (a, b) => {
        const result = a + b;
        console.log(a + " + " + b + " = " + result);
        return result;
    };
    
    add(5, 3);
    add(10, 20);
</script>

このコードを実行すると、Consoleに以下のように表示されます。

こんにちは、田中さん(通常の関数)
こんにちは、佐藤さん(アロー関数)
5 + 3 = 8
10 + 20 = 30

引数がある場合も、通常の関数とアロー関数は同じように動作します。引数が複数ある場合は、カンマで区切って(a, b)のように書きます。

アロー関数の短縮記法

アロー関数には、条件に応じてさらに短く書ける記法があります。これを覚えることで、より簡潔なコードが書けるようになります。

引数が1つの場合の短縮

引数が1つだけの場合、括弧を省略することができます。

<script>
    // 通常のアロー関数
    const double1 = (num) => {
        return num * 2;
    };
    
    // 引数の括弧を省略した書き方
    const double2 = num => {
        return num * 2;
    };
    
    // どちらも同じ動作
    console.log("double1(5): " + double1(5));
    console.log("double2(5): " + double2(5));
</script>

(num)と書く代わりに、numだけで書くことができます。ただし、引数が0個の場合や2個以上の場合は、括弧を省略できません。

処理が1行の場合の短縮

関数の処理が1行だけで、かつその結果をreturnする場合は、波括弧({})とreturnを省略することができます。

<script>
    // 通常のアロー関数
    const triple1 = (num) => {
        return num * 3;
    };
    
    // 短縮記法
    const triple2 = (num) => num * 3;
    
    // さらに引数の括弧も省略
    const triple3 = num => num * 3;
    
    // すべて同じ動作
    console.log("triple1(4): " + triple1(4));
    console.log("triple2(4): " + triple2(4));
    console.log("triple3(4): " + triple3(4));
</script>

この短縮記法では、=>の後に書かれた式の結果が自動的に戻り値になります。

短縮記法の実例

いくつかの短縮記法の例を見てみましょう。

<script>
    // 基本的な計算を行うアロー関数
    const square = x => x * x;              // 2乗を計算
    const isEven = num => num % 2 === 0;    // 偶数かどうか判定
    const getLength = text => text.length;  // 文字列の長さを取得
    
    // 複数の引数がある場合
    const multiply = (a, b) => a * b;       // 掛け算
    const getMax = (x, y) => x > y ? x : y; // 大きい方を返す
    
    // 関数をテストしてみる
    console.log("=== 短縮記法のテスト ===");
    console.log("5の2乗: " + square(5));
    console.log("8は偶数? " + isEven(8));
    console.log("7は偶数? " + isEven(7));
    console.log("「こんにちは」の文字数: " + getLength("こんにちは"));
    console.log("6 × 7 = " + multiply(6, 7));
    console.log("15と23の大きい方: " + getMax(15, 23));
</script>

このコードを実行すると、以下のような結果が表示されます。

=== 短縮記法のテスト ===
5の2乗: 25
8は偶数? true
7は偶数? false
「こんにちは」の文字数: 5
6 × 7 = 42
15と23の大きい方: 23

このように、簡単な計算や判定を行う関数は、アロー関数の短縮記法を使うことで非常に簡潔に書くことができます。

通常の関数とアロー関数の違い

アロー関数と通常の関数は、多くの場面で同じように使えますが、いくつかの違いがあります。初心者の方が知っておくべき主な違いを説明します。

書き方の違い

まず、見た目の違いを整理してみましょう。

<script>
    // 通常の関数宣言
    function normalFunction(x) {
        return x + 10;
    }
    
    // 関数式
    const functionExpression = function(x) {
        return x + 10;
    };
    
    // アロー関数(完全版)
    const arrowFunction1 = (x) => {
        return x + 10;
    };
    
    // アロー関数(短縮版)
    const arrowFunction2 = x => x + 10;
    
    // すべて同じ結果
    console.log("通常の関数: " + normalFunction(5));
    console.log("関数式: " + functionExpression(5));
    console.log("アロー関数1: " + arrowFunction1(5));
    console.log("アロー関数2: " + arrowFunction2(5));
</script>

宣言の時期による違い

通常の関数宣言は、コードのどこで宣言しても、そのスコープ内のどこからでも呼び出すことができます。しかし、アロー関数は変数に代入する形で作るため、その行より前では使用できません。

<script>
    // 通常の関数は定義前でも呼び出せる
    console.log("定義前の呼び出し: " + normalFunc(3));
    
    function normalFunc(x) {
        return x * 2;
    }
    
    // アロー関数は定義前では呼び出せない
    // console.log(arrowFunc(3)); // エラーになる
    
    const arrowFunc = x => x * 2;
    
    console.log("定義後の呼び出し: " + arrowFunc(3));
</script>

アロー関数を使うべき場面

アロー関数は特に以下のような場面で便利です。

短い処理の場合

処理が短く、単純な計算や変換を行う場合は、アロー関数の短縮記法が読みやすくなります。

<script>
    // 数値の配列を2倍にする関数
    const numbers = [1, 2, 3, 4, 5];
    
    // 通常の関数を使った場合
    function doubleNormal(num) {
        return num * 2;
    }
    
    // アロー関数を使った場合
    const doubleArrow = num => num * 2;
    
    console.log("元の配列: " + numbers);
    
    // どちらも同じ結果だが、アロー関数の方が簡潔
    console.log("2倍(通常): " + numbers.map(doubleNormal));
    console.log("2倍(アロー): " + numbers.map(doubleArrow));
    
    // さらに短く書くことも可能
    console.log("2倍(直接): " + numbers.map(x => x * 2));
</script>

一時的な処理の場合

使い捨ての小さな関数を作る場合、アロー関数が便利です。特に、配列の処理(後の章で詳しく学びます)でよく使われます。

<script>
    const students = [
        { name: "田中", score: 85 },
        { name: "佐藤", score: 92 },
        { name: "山田", score: 78 }
    ];
    
    // 点数が80以上の学生を抽出
    const highScorers = students.filter(student => student.score >= 80);
    
    // 学生の名前だけを取り出す
    const names = students.map(student => student.name);
    
    console.log("80点以上の学生:");
    highScorers.forEach(student => console.log(student.name + ": " + student.score + "点"));
    
    console.log("全学生の名前: " + names.join(", "));
</script>

アロー関数の注意点

アロー関数を使う際の注意点もいくつかあります。

複数行の処理では波括弧が必要

処理が複数行になる場合は、波括弧とreturn文を明示的に書く必要があります。

<script>
    // 短縮記法は1行の場合のみ
    const simple = x => x * 2;  // OK
    
    // 複数行の場合は波括弧とreturnが必要
    const complex = x => {
        console.log("計算中: " + x);
        const result = x * 2 + 1;
        return result;
    };
    
    console.log("simple(5): " + simple(5));
    console.log("complex(5): " + complex(5));
</script>

オブジェクトを返す場合の注意

アロー関数でオブジェクトを返したい場合は、括弧で囲む必要があります。

<script>
    // オブジェクトを返す場合は括弧で囲む
    const createPerson = name => ({ name: name, age: 20 });
    
    // 括弧がないと、波括弧が関数の本体と解釈されてしまう
    // const createPersonWrong = name => { name: name, age: 20 }; // エラー
    
    const person = createPerson("田中");
    console.log("作成された人: " + person.name + "、年齢: " + person.age);
</script>

まとめ

本章では、JavaScriptのアロー関数について学びました。以下の内容を理解できたことと思います。

  • アロー関数の基本構文 const 関数名 = (引数) => { 処理 };
  • 引数が1つの場合は括弧を省略できること
  • 1行の処理の場合は波括弧とreturnを省略できること
  • 通常の関数とアロー関数の違いと使い分け
  • アロー関数が便利な場面と注意点

アロー関数は、特に短い処理を書く場合や、配列の操作と組み合わせる場合に威力を発揮します。最初は通常の関数と混在して使うかもしれませんが、慣れてくると適切な場面でアロー関数を選択できるようになります。次回は、配列の各要素に対して処理を行うforEachメソッドについて学んでいきます。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
引数と戻り値を理解しよう