Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASでGoogleカレンダーの複数の予定をまとめて登録するツールを作成しています。

前回の記事はこちら。

Google Apps Scriptで日付関連の処理を関数化する例とその際のポイント
GASでGoogleカレンダーにまとめてイベントを登録できるツールを作成しています。今回は、Google Apps Scriptで日付関連の処理を関数化する例とそのポイントについて解説をしていきます。

日付関連の処理を関数化してスクリプトをスッキリさせる例についてお伝えしました。

さて、その関数化した関数なのですが、呼び出すときの引数が省略された場合にデフォルトの値を設定するように工夫していたんですね。

今回は、引数が省略された場合には仮引数はどうなってしまうのか、またその際の不都合を回避するためにはどうすべきかについて解説をしていきます。

Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法についてです。

では、行ってみましょう!

前回のおさらい

前回作成したスクリプトはこちらです。

スプレッドシートに入力してある予定リストをもとに、デフォルトのGoogleカレンダーにイベントを追加していくというものです。

関数createEventsがメインの関数で、その中の日付関連の共通処理を関数化して分離したものが関数addTimeになります。

引数が省略された場合の仮引数の値

さて、上記のスクリプトですが8,9行目で関数addTimeをそれぞれ呼び出していますね。

それで、その引数の数に注目をすると

  • startTimeを求めるときには、引数が2つ
  • endTimeを求めるときには、引数が3つ

となっています。

一方で、関数addTimeのほうは、その受け皿として仮引数はdate, time, howLongの3つがありますよね。

つまり、startTimeを求めるときには、最後の引数が省略されているわけですが、その仮引数howLongの値ってどうなっちゃってるんですかね?

引数が省略されたら仮引数はundefinedに

試しに、28行目の前に以下のステートメントを挿入して試してみましょう。

そうすると、以下のようにログ出力がされます。

GASで与えられてない引数の値はundefinedになる

そうなんです、GAS(というかJavaScript)では、関数呼び出しのときに引数を与えられていない仮引数の値は「undefined」になるのです。

undefinedというのは「未定義」を表す特殊な値です。

引数のデフォルト値を設定する

このままにしておくと、関数addTime内の以降のgetHoursメソッドなどでエラーを起こしてしまうので、引数が省略されたときにデフォルト値を設定しておくと良いということになります。

その部分が、以下のif文の処理ということですね。

このif文のように、変数自体をif文の条件式に指定した場合は、その変数の値が真偽値に型変換されます。

そして、Dateオブジェクトであればnullまたはundefinedでない限りはtrueの判定になります。

一方で、undefinedはfalseになりますから、その場合にif文の処理が実行され、「0」を表すDateオブジェクトが生成されてhowLongにセットされるということになります。

なぜ引数で与えずにデフォルト値の処理を入れるか

なお、そもそも関数addTimeへの第3引数を省略せずに「new Date(0,0,0,0,0,0)」を指定する方法もあります。

ですが、多くの場合、指定すべき引数の数は減らせたほうが良いはずです。

例えば、関数addTimeを第3引数を「new Date(0,0,0,0,0,0)」で何回も使用することがあるとしたら、都度指定するのはどう考えても面倒ですもんね。

まとめ

以上、Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法についてお伝えしました。

GAS(というかJavaScript)では、関数の引数は省略できること、また省略した場合の仮引数はundefinedになるということですね。

さて、デフォルト値を指定するif文ですが、実はさらにスマートに記述することができます。

次回、それについて解説をしていきますね。

GASで論理演算子「||」を使って条件分岐の省略をしつつ変数に値を代入する方法
GASでGoogleカレンダーの予定をまとめて登録するツールを作成しています。今回は、Google Apps Scriptで論理演算子「||」を使って条件分岐の省略をつつ変数に値を代入する方法をお伝えします。

どうぞお楽しみに!

連載目次:GASでカレンダーイベントをまとめて追加するツールを作る

Googleカレンダー便利ですよね!ただ、複数のイベントをいくつも追加しなければいけないとき…少し面倒です。そんなときのための便利ツールとして、スプレッドシートの入力情報をもとにカレンダーイベントをまとめて追加するツールを作成していきます。
  1. GASでデフォルトのGoogleカレンダーにイベントを追加する簡単なスクリプト
  2. GASでスプレッドシートの入力からGoogleカレンダーに複数のイベントを追加
  3. Google Apps ScriptでDateオブジェクトの複製や時刻のセットで注意すること
  4. Google Apps Scriptで日付関連の処理を関数化する例とその際のポイント
  5. Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法
  6. GASで論理演算子「||」を使って条件分岐の省略をしつつ変数に値を代入する方法

The following two tabs change content below.
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ ★フォロー頂ければ嬉しいです。

コメント