関数宣言・関数式・アロー関数 (GAS/JavaScript) | GASおじさんのブログ
GASの基本

関数宣言・関数式・アロー関数 (GAS/JavaScript)

関数宣言 GASの基本

本記事では関数を定義する3つの方法について解説します。

YouTubeでも解説していますので動画で見たい方は以下からどうぞ。

GASで関数を定義する3つの方法

GAS (JavaScript) では以下の3つの方法で関数を定義することができます。

  1. 関数宣言 (Function Declaration)
  2. 関数式 (Function Expression)
  3. アロー関数 (Arrow Function)

1個ずつ見ていきましょう。

関数宣言 (Function Declaration)

まずは一番ノーマルな関数の定義です。

こちらは関数宣言キーワードのfunctionを使って関数を定義します。

function square(x) {
  return x ** 2;
}

引数を2乗して返すのでsquareという関数名をつけました。

このように関数名がある関数のことを名前付き関数 (named function) といいます。

この後紹介する無名関数 (anonymous function) の対義語ですね。

関数式 (Function Expression)

次に関数式による関数の定義です。

const square = function (x) {
  return x ** 2;
};

これは「右辺のfunctionオブジェクトを、左辺のsquareという変数に代入する」という式になっています。このような式のことを関数式といいます。

このとき、右辺のfunctionは名前が付いていないので、無名関数 (anonymous function) ということになります。

アロー関数 (Arrow Function)

アロー関数は、関数宣言のfunctionを使う代わりに、アロー=>を使います。

const square = (x) => {
  return x ** 2;
};

アロー関数の引数が1個の場合は、パーレン( )を省略できます。

この場合、引数は x の1個だけなので、(x)xとすることができます。

const square = x => {
  return x ** 2;
};

さらに、返り値が1行で終わるようなシンプルな記述の場合、returnおよびブレイス{ }を省略できます。

const square = x => x ** 2;

ちなみにreturnを省略する書き方のことを「暗黙的なreturn」とか言ったりします。

GASでの主な使い分け

関数宣言を使うべきケース

スクリプト全体で使用する汎用的な関数には関数宣言を使うのがいいでしょう。

function sendEmail() {
  GmailApp.sendEmail("example@example.com", "件名", "本文");
}

アロー関数を使うべきケース

filterやmapなど高階関数のコールバックを記述するときはアロー関数を使うのがいいでしょう。

function getActiveUsers() {
  const users = getAllUsers();
  const activeUsers = users.filter(user => user.status == 'アクティブ');
  return activeUsers;
}
function getUserNames() {
  const users = getAllUsers();
  const userNames = users.map(user => user.name + '様');
  return userNames;
}

まとめ

GAS (JavaScript) の関数の定義は、3種類の書き方がある上に、アロー関数にはいろいろな省略形があるので、最初は混乱しがちです。

しかし、結局これらは単なる書き換えをしているに過ぎないので、そんなに難しく考えることはありません。繰り返し見ていれば徐々に慣れていきます。

function square(x) {
  return x ** 2;
}

const square = function (x) {
  return x ** 2;
};

const square = (x) => {
  return x ** 2;
};

const square = x => {
  return x ** 2;
};

const square = x => x ** 2;

上記5つの関数はすべて同じことをしている関数で、単なる書き換えをしているに過ぎないです。

正確には、ホイスティング(関数の巻き上げ)の問題があるので、単なる書き換えではないのですが、簡単なGASプログラミングをする上ではホイスティングはあまり気にする必要がないかと思われます。

これについて気になる場合はChatGPTに聞いてみてください。

また、次のような質問を聞いてみるのもいいかもしれません。

JavaScriptにおける関数の定義について、関数宣言の場合は{ }の後にセミコロンはつけず、関数式やアロー関数の場合はセミコロンをつけるのはなぜですか?

気になる人はぜひ調べてみてください。

以上、GASで関数を定義する3つの方法についての解説でした。

連載目次: 高階関数シリーズ

  1. 【高階関数】forEachメソッドについて解説 (GAS/JavaScript)
  2. 【高階関数】mapメソッドについて解説 (GAS/JavaScript)
  3. 【高階関数】filterメソッドについて解説 (GAS/JavaScript)
  4. 【高階関数】sortメソッドについて解説 (GAS/JavaScript)
  5. 【高階関数】reduceメソッドについて解説 (GAS/JavaScript)
  6. 【高階関数】findとfindIndexについて解説 (GAS/JavaScript)
  7. 【高階関数】everyとsomeについて解説 (GAS/JavaScript)
  8. 関数宣言・関数式・アロー関数 (GAS/JavaScript)

コメント

タイトルとURLをコピーしました