ひな姉と学ぶJavaScript!スッキリ書ける「アロー関数」ってなに?

Javascriptアロー関数サムネ

アロー関数について解説します。

Javascriptの解説記事では、先輩エンジニアとの対話形式でJavascriptの学習を進めていきます。

プログラミング初心者の方、初めてプログラミングを学ぼうと思っている方、仕事の都合上Javascriptが必要になったという方にとって有益なコンテンツになっています。

少しでも当てはまる方は、ぜひみていってくださいね!

アロー関数とは?

登場人物
天野 陽菜(あまの ひな):自社サービス開発企業に勤めるフロントエンドエンジニア(29歳)。明るくフレンドリーで、後輩の育成にも積極的。実は元ゲーマーで方向音痴。

後輩ちゃん:JavaScriptを学び始めた初心者。疑問を持ちつつも、天野先輩の解説で理解を深めていく。

後輩ちゃん
今回からJavascriptの勉強、お願いします!
天野先輩
こんにちはー!やる気満々だね、嬉しいな!
今日はね、コードをもっとスッキリ書けるようになる、ちょっとカッコイイ書き方を紹介しようと思ってるんだ。
後輩ちゃん
カッコイイ書き方…?なんですかそれ、気になります!
天野先輩
ふふふ、その名もアロー関数! まるで弓矢みたいでしょ?
これが使えるようになると、コードが短く、そして読みやすくなる場面がたくさんあるんだ。
特に、他の関数の中でちょこっとした処理を書きたい時とかに大活躍するよ!
後輩ちゃん
アロー関数…!名前は聞いたことあるような、ないような…。でも、コードがスッキリするのは嬉しいです!

Javascriptの関数をおさらい

天野先輩
よし、じゃあまず、今まで使ってきた普通の関数の書き方、ちょっと思い出してみようか。
例えば、二つの数字を足し算する関数、どうやって書くか覚えてる?
後輩ちゃん
えっと… functionって書くやつですよね?こんな感じでしたっけ?
function add(a,b) {
return a + b;
}
console.log(add(3,5));//8と表示される

解説:addという関数を作成しました。
addという関数内では、a+bという処理を行います。
最後に、console.logでaddの結果(今回は3+5なので8になる)を表示します。

天野先輩
大正解! さすがだね!これが基本の関数の書き方。
じゃあ、この add 関数をアロー関数で書くとどうなるか、見てみようか!
const addArrow = (a,b) => {
return a + b;
}
console.log(addArrow(3+5));//これも8って表示される
天野先輩
じゃーん!これがアロー関数版の add 関数だよ!
後輩ちゃん
わ!本当だ! function っていう言葉がなくなって、代わりに=>っていう矢印みたいなのが入ってますね!これがアロー…?
天野先輩
その通り!この => がアロー(矢印)の由来なんだ。なんだかシュッとしてるでしょ?
後輩ちゃん
確かに、少し短くなった気がします!
天野先輩
でね、アロー関数はもっとスリムになれるんだ。例えば、関数の中の処理が return 一行だけの場合、{} と return を省略できちゃう!
const addArrowSlim = (a,b) =>  a + b;
console.log(addArrow(3+5));//これも8って表示される
後輩ちゃん
ええー!すごい!一行になっちゃった!これは見やすいかも!
天野先輩
でしょでしょ?さらに、引数が一つだけの場合は、引数を囲む () も省略できるんだ。例えば、数字を二乗する関数とか。
//普通の関数
function square(x){
return x * x;
}

//アロー関数
const squareArrow = x => x * x;
console.log(squareArrow(4));//16
後輩ちゃん
おおー!どんどん短くなりますね!じゃあ、もし引数がない場合はどうなるんですか?
天野先輩
いい質問だね!引数がない場合は、() は省略せずに書くんだ。こんな感じ。
const seyHello = () => {
console.log('こんにちは!');
}
seyHello();//こんにちは!って表示される
後輩ちゃん
なるほどー!いろんなパターンがあるんですね。慣れるまでちょっと練習が必要かも…。
天野先輩
大丈夫、大丈夫!最初は見慣れないかもしれないけど、使っていくうちに自然と手が動くようになるよ。まるでゲームのコマンド入力みたいにね!
後輩ちゃん
天野先輩の例え、いつも面白いです!

解説:アロー関数を使う場合、関数の処理がreturn文1行だけの時は、returnと{}を省略することが可能です。
アロー関数の引数が1つだけの場合、()も省略することができます。
個人的にはあまり省略形を使うことはありませんが、覚えておくと他の人が書いたコードを読む時に便利です!

アロー関数のメリットって?

天野先輩
アロー関数のいいところは、さっきから見てるようにコードが短くスッキリ書けること。これは大きなメリットだね。あと、もう一つ大事なポイントがあって、それは this の扱いが普通の関数とちょっと違うんだ。
後輩ちゃん
this …ですか?なんだか難しそうな響き…。
天野先輩
うん、this はね、JavaScriptの中でもちょっとクセのある子でね。普通の関数だと、this が何を指すかは『どうやって呼び出されたか』で変わっちゃうことがあるんだけど、アロー関数の場合は、基本的に『アロー関数が書かれた場所』の this をそのまま引き継ぐんだ。
後輩ちゃん
ひ、引き継ぐ…?
天野先輩
そうそう。例えば、オブジェクトのメソッドの中で、さらにコールバック関数を使う時とかに、this がどこを向いてるか混乱しにくくなるんだよ。…って、ちょっと専門的すぎたかな?これはまた別の機会に、もっと詳しくお話しするね!今は『ふーん、そんな違いもあるんだな』くらいでOK!
後輩ちゃん
は、はい!とりあえず、今はスッキリ書けるのが便利って覚えておきます!
天野先輩
それで十分!理解が早くて助かるよー!

解説:実は、functionで定義した関数と、アロー関数で定義した関数には違いがあります。
this、argumants,superへのバインドがない、コンストラクターとして使用することができない、ジェネレーター関数として使用することができないなど、さまざまな違いがあります。
今回は、「少し違いがあるんだな」と覚えてもらえればOKです!

アロー関数が大活躍する場面!

天野先輩
じゃあ、アロー関数が特に輝く場面を紹介するね!それは、配列を操作するメソッドと一緒に使う時なんだ。
後輩ちゃん
配列のメソッド…? map とか filter とかですか?
天野先輩
そうそう、それそれ!例えば、数字の配列の各要素を2倍にしたい時、map を使うよね。普通の関数で書くとこんな感じ。
const numbers = [1,2,3,4,5];
const dubledNumbers = numbers.map(function(number){
return number * 2;
});
console.log(dubledNumbers);//[2,4,6,8,10]
天野先輩
これをアロー関数で書くと…
const numbers = [1,2,3,4,5];
const doubleNumbersArrow = numbers.map(number => number * 2);
console.log(doubledNumberArrow);//[2,4,6,8,10]
後輩ちゃん
うわー!めちゃくちゃスッキリしましたね!一行で書けちゃうんだ!
天野先輩
でしょ?まるで装備を最適化してステータスアップした感じ!こういう短い処理をコールバック関数として渡すときに、アロー関数は本当に見やすくて便利なんだよ。他にも forEach とか filter とか、色々な配列メソッドで大活躍するから、ぜひ使ってみてほしいな。
後輩ちゃん
はい!なんだかアロー関数、好きになってきました!

解説:mapやforEachなどの、コールバック関数を持つタイプのメソッドを扱う場合、functionで定義する形の関数を使用すると、コードが冗長になってしまいます。
アロー関数を使用することで、短くすっきりとしたコードを書くことができます!

まとめと応援メッセージ

天野先輩
よかった!今日のポイントをまとめると…

・アロー関数は => を使って書く、新しい関数の書き方だよ!
・function キーワードが不要で、条件によっては {}, return, () も省略できてスッキリ!
・特に配列のメソッド(map とか)と一緒に使うと、コードが読みやすくなるよ!
・this の扱いがちょっと違うけど、それはまた今度詳しくね!

後輩ちゃん
天野先輩、ありがとうございます!アロー関数、使ってみたくなりました!
天野先輩
うんうん!最初は書き慣れないかもしれないけど、積極的に使ってみるのが上達への近道だよ。もし途中で道に迷ったら…あ、いや、コードで迷ったら、いつでも聞いてね!私もたまにリアルで道に迷うけど、JavaScriptの道案内は得意だから!
後輩ちゃん
頼りにしてます!ひな姉、今日もありがとうございました!
天野先輩
どういたしまして!また一緒に楽しく学んでいこうね!じゃあ、また次回!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUTこの記事をかいた人

2024年3月にSEOやリスティング広告等のマーケティング会社を設立。 元サイバーエージェントグループでSEMマーケティングを経験 入社3カ月で社内表彰、コンサルを担当したWEBメディアではPVを約10倍に伸長。 担当したweb広告ではクライアントの在庫が無くなるほどCVを獲得し、 「これ以上は在庫が無くなるので改善しなくて結構です」と嬉しい悲鳴を頂いたことも