ReactでおなじみのJavaScriptやTypeScriptに登場する「アロー関数(=>
)」その使い方と意味、生い立ちについて解説します。
意味をしっかり覚えるとその後の理解が進みます。
“=>” アロー関数とは?(Arrow Functions)
正式には**「アロー関数(Arrow Functions)」**と呼ばれます。
アロー関数は、JavaScriptのES6(ECMAScript 2015)で導入された割と新しい関数定義の方法です。
アロー関数は、従来の関数宣言に比べて簡潔な構文を提供し、特に無名関数やコールバック関数の定義に便利です。
=>
という構文を使って定義されることから、「アロー(矢印)関数」と呼ばれます。
定義がより簡単かつ直感的になりました。
アロー関数 =>(矢印)の特徴
- 簡潔な構文:
- アロー関数は、
function
キーワードを省略し、=>
を使用することで関数を定義します。
- アロー関数は、
- 暗黙の
return
:- 単一の式を返す場合、中括弧と
return
キーワードを省略できます。
- 単一の式を返す場合、中括弧と
- レキシカル
this
バインディング:- アロー関数は、宣言された場所の
this
を継承します。従来の関数と異なり、アロー関数内のthis
は、関数が定義されたスコープのthis
を保持します。
- アロー関数は、宣言された場所の
その前に無名関数(匿名関数)とは?
「匿名関数」と「無名関数」は、同じ意味として使われます。
無名関数(匿名関数)とは、関数名を持たない関数のことです。
主にその場限りで使用する関数や、コールバックとして渡す関数に使われます。
この後例の中で説明しますので、覚えておいてください。
関数定義(ES5以前)とアロー関数(ES6以降)の実装比較
従来の関数定義(ES5以前)は、functionキーワードを使用して行います。
アロー関数(ES6以降)は、=>(矢印)を使って定義します。より簡潔な構文で、特にコールバック関数や無名関数の定義に適しています。
通常の関数
// -------------------------
// 従来の関数定義
// -------------------------
// 名前付き関数
function add(a, b) {
return a + b;
}
// 匿名関数(関数式) ※ 無名関数とも呼ばれる
const multiply = function(a, b) {
return a * b;
};
// -------------------------
// ☆アロー関数☆
// -------------------------
// 名前付き関数
const add = (a, b) => {
return a + b;
};
// 匿名関数(関数式) ※ 無名関数とも呼ばれる
// 一行の内容なら、さらに簡潔に{
}カッコが省略できる(暗黙のreturnを使用)
const multiply = (a, b) => a * b;
コールバック関数での使用
// -------------------------
// 従来の関数定義
// -------------------------
const numbers = [1, 2, 3, 4, 5];
// 通常の関数を使ったコールバック
const doubled = numbers.map(function(number) {
return number * 2;
});
// -------------------------
// ☆アロー関数☆
// -------------------------
const numbers = [1, 2, 3, 4, 5];
// アロー関数を使ったコールバック
const doubled = numbers.map(number => number * 2);
アロー関数が使えない書き方
アロー関数は便利な機能を提供しますが、適していない場合もあります。
特に、アロー関数はコンストラクタとして使用できません。
コンストラクタとして使用できない
アロー関数は、new
キーワードでインスタンスを作成するためのコンストラクタとして使用できません。これはアロー関数が持つ特性によるものです。
// -------------------------
// 従来の関数定義
// -------------------------
function Person(name) {
this.name = name;
this.age = 0;
}
const person = new Person("Alice");
console.log(person.name); // 出力: Alice
console.log(person.age); // 出力: 0
// -------------------------
// ☆アロー関数☆
// -------------------------
const Person = () => {
this.age = 0;
};
// 以下はエラーになります
const person = new Person(); // TypeError: Person is not a constructor
const Person = (name) => {
this.name = name;
this.age = 0;
};
// 以下はエラーになります
const person = new Person("Alice"); // TypeError: Person is not a constructor
- レキシカルな
this
バインディング: アロー関数は、宣言されたスコープのthis
を継承します。通常の関数では、new
キーワードを使用すると、新しいオブジェクトが作成され、そのオブジェクトがthis
としてバインドされます。しかし、アロー関数はそのような動作をしません。 - プロトタイプが存在しない: 通常の関数は
prototype
プロパティを持ちますが、アロー関数はprototype
プロパティを持ちません。new
キーワードを使用すると、新しいオブジェクトは関数のprototype
プロパティを継承しますが、アロー関数にはこのプロパティがないため、継承機構が機能しません。
寄付の依頼
もし、少しでもご参考になりましたらサイト運営への寄付をお願いします。
とても励みになります。
If you would like to help, please make a donation to the site management.
It is very encouraging.
BTC (ビットコイン) アドレス |
---|
35AfkHtN3paTC1iNVtHg6BDmCnHmffzQWM |
DEEPコイン アドレス |
---|
0x43Dbe7F99b4A31bF184b98A8A814ADEC48FB789D |
コメント