Google Apps Script

【GAS/JavaScript】While文の条件式にイコール(代入演算子)を使うと「変数代入」と「評価」が同時にできる

こんにちは、もり(moripro3)です。

この記事では、GASのWhile文の条件式に使われている=(代入演算子)について紹介します。

While文の条件式に比較演算子(==, != <, <=, >, >=, など) が使われているのはよく見るけど、代入演算子(=)はどういう意味なの?という疑問を解消します。

以下が、While文の条件式に=(代入演算子)を使ったサンプルスクリプトです。

実行結果は以下のとおりです。

このスクリプトではTrue/Falseの判定が「暗黙の型」でなされています。GASの特徴として、数値の0はfalse、1以上の整数はtrueと判定されます。

 

それでは、While文の条件式の=(代入演算子)の意味を見ていきましょう。

While文の条件式に代入式を使うと「変数の代入」と「変数の評価」が同時に行われます。sample1では、条件式の中で「変数xの減算」と「変数xの評価」が同時に行われています。変数xが1ずつ減算されていき、0(false)になったときにループを抜ける仕組みです。

とはいえ「同時に」といっても、プログラムには実行の順番があるので、厳密には「変数の代入」と「変数の評価」には順番があると考えられます。sample1の実行ログでは最後の0が出力されていないので、条件式の中では「変数の代入」→「変数の評価」の順番で処理されていることがわかります。

条件式の中で関数を呼び出し、戻り値を変数に代入する方法でも結果は同じになります。

sample2でも最後の0が出力されていないので、条件式では「変数の代入」→「変数の評価」の順番で処理が行われていることがわかります。

例外として、条件式の中でデクリメント(後置デクリメント)演算子を使うと挙動が変わります。

sample1,2と実行結果が異なります。最後の0がログ出力されているので、条件式の中では「変数の評価」→「変数の代入」の順番で処理されていると推測できます。

以上、While文の条件式に=(代入演算子)を使ったときの挙動について紹介しました。