【GAS】var vs let vs const 〜変数宣言のラグナロク〜

はじめまして、4号です。
なかなか痩せない3号さんの弟子をやらせてもらっています。
GoogleAppsScript(以後GAS)についての記事をメインに投稿していきますので、どうぞよろしくお願いします。

変数宣言については他のブログでもよく書かれてますが、私もこの戦いに終止符を打とうと思います。
全ての開発環境に当てはまるわけではないので、あくまで参考程度に。

変数宣言の種類と特徴

「そんなん知ってるよ!」って方も多いと思いますが、念のため説明します。
タイトルにもある通り、宣言の種類は var, let, const の3種類。
この3種類の違いは再代入と再宣言ができてしまうかできないかにあります。
もう一度いいます。
再代入と再宣言ができてしまうかできないかです。
何が言いたいかというと、
再代入と再宣言ができちゃダメなんですよ(基本的には)
理由は再代入や再宣言をすると予期せぬ結果になってしまう可能性があるから。

再宣言の恐ろしさを伝えるために例をあげます。
num という変数を定義したとしましょう。
そして num という変数を定義したという事を忘れた頃に再び num という変数を宣言したとしましょう。
すると本来保持しておきたかったはずの(最初に宣言した) num が後に宣言した num にすり替わってしまうんです…
再代入に関しても同じことが言えます。

また、 var に関してはスコープという概念が存在しません。
「すこーぷとはなんぞや」という方はこちらをご覧ください。
簡単に説明すると、スコープとは { } の中で宣言した変数はその { } の中でしか使えないというルールのことです。
var にはこの概念がないので再代入や再宣言をしてしまう可能性が高まります。

これらを踏まえて各宣言の特徴を見比べてみましょう。

var ・・・ 再代入OK、再宣言OK、スコープ無し
let ・・・ 再代入OK、再宣言NG、スコープあり
const ・・・ 再代入NG、再宣言NG、スコープあり

さあ、カードは出揃いました…
決着をつけましょう。

結論

上記の情報を見れば勝者は一目瞭然でしょう…

結論、

constの圧勝です。

const は再代入、再宣言、スコープ外からの呼び出しをしようとするとエラーになってくれます。
よって const は最も安全な宣言方法だと言えるでしょう。
無敵ですね。

理論はわかった。でも…

この結果からわかるように私は基本 const を使っているのですが、どうしても再代入が必要になる場合があります。
そういったときには let を使いましょう。
letconst を上手に使い分けることで、再代入できてしまうというlet短所であった部分が長所に変貌します。
また、let で宣言された変数は後から再代入される変数、 const で宣言された変数は今後変わることがない変数(定数)だとひと目で理解することができます。

そしてこの際だから言いますが、var を使うメリットは無いに等しいです。
var を使うということは自ら謎のエラーと戦う原因を生み出していることになります。

この記事が皆さんのコードを見直すきっかけになれば幸いです。

弊社ではGoogle Apps Scriptのセミナーもご用意しておりますので、
お気軽にご相談ください。

野村 航平

高専でC・Java、プログラミングスクールにてRuby・JavaScript・SQL・AWSなどを学習後、現在のヒカリシステムに入社。
木下さんの弟子をやらせてもらっています。

関連記事