便利なGASレシピ集!に戻る場合は以下から
はじめに
今回のビジボットは、前回同様『『Google Apps Script 完全入門』を買って基礎入門① ☆☆☆ – ビジボット』の続きを書いていきます!
GASに限らず、プログラム本は徐々に難しくなっていく傾向があるのでなるべく理解を噛み砕いて説明していきます。しかし、それでも難しい場合は立ち止まらず進んじゃってください!だってせっかく書いた方が楽しいのに止まっちゃうなんてもったいないですから!
↓↓前回記事↓↓
それでは早速始めていきます!
1.計算 – 続き
前回は演算による処理を記載しました。
ここでは『インクリメント演算子』と『デクリメント演算子』について説明していきます。
書き方は2通りあります。
『変数 ++』または『++ 変数』です。演算子の『++』をつける位置によって処理結果が変わってくるので、以下コードを見てください。
基本、数字を1繰り上げるというアクションは変わらないのですが、変数の前につけると数字が1繰り上がってから結果が表示される。変数の後につけると処理が終わってから数字が1繰り上がる結果になってます。
1 2 3 4 5 6 7 8 9 |
function myFunction() { var x = 1; x++; Logger.log(x); //2 Logger.log(++x); //3 ←数字が繰り上がって結果表示 Logger.log(x++); //3 ←結果変わらず Logger.log(x); //4 ←上記処理後、数字が繰り上がる } |
ログ結果はこんな感じ。
1 2 3 4 |
[19-02-26 01:53:21:419 JST] 2.0 [19-02-26 01:53:21:419 JST] 3.0 [19-02-26 01:53:21:420 JST] 3.0 [19-02-26 01:53:21:420 JST] 4.0 |
インクリメントと同様、書き方は2通りあります。
『変数 –』または『– 変数』です。演算子の『–』をつける位置によって先ほど同様処理結果が変わってくるので、以下コードを見てください。
基本、数字を1繰り下げるというアクションはインクリメントと逆の機能です。変数の前につけると数字が1繰り下がってから結果が表示される。変数の後につけると処理が終わってから数字が1繰り下がる結果になってます。
1 2 3 4 5 6 7 8 9 |
function myFunction() { var y = 5; y--; Logger.log(y); //4 Logger.log(--y); //3 ←数字が繰り下がって結果表示 Logger.log(y--); //3 ←結果変わらず Logger.log(y); //2 ←上記処理後、数字が繰り下がる } |
ログ結果はこんな感じ。
1 2 3 4 |
[19-02-26 02:00:54:774 JST] 4.0 [19-02-26 02:00:54:775 JST] 3.0 [19-02-26 02:00:54:775 JST] 3.0 [19-02-26 02:00:54:776 JST] 2.0 |
代入演算子とは、通常の演算子とは異なり、変数に値を代入する演算子が代入演算子です。
今まで出てきていた『=』は、最も代表的な代入演算子ですが、ここで紹介するのは算術演算と同時に代入を行う『複合代入演算子』です。
複合演算子
= | 左辺の変数に値を代入 | x = 3(xは3です) |
+= | 左辺の値に右辺の値を加算して代入 | x += 3(xはx+3です) |
-= | 左辺の値から右辺の値を減算して代入 | x -= 3(xはx-3です) |
*= | 左辺の値に右辺の値を乗算して代入 | x *= 3(xはx*3です) |
/= | 左辺の値を右辺の値で除算した値代入 | x /= 3(xはx/3です) |
%= | 左辺の値を右辺の値で除算した剰余を代入 | x %= 3(xはx/3の余りです) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function myFunction() { var x = 3; Logger.log('x→' + x); x += 3; Logger.log('x += 3→' + x); x -= 3; Logger.log('x -= 3→' + x); x *= 3; Logger.log('x *= 3→' + x); x /= 3; Logger.log('x /= 3→' + x); x %= 3; Logger.log('x %= 3→' + x); } |
ログ結果はこんな感じ。
1 2 3 4 5 6 |
[19-02-26 02:17:25:123 JST] x→3 [19-02-26 02:17:25:124 JST] x += 3→6 [19-02-26 02:17:25:124 JST] x -= 3→3 [19-02-26 02:17:25:125 JST] x *= 3→9 [19-02-26 02:17:25:126 JST] x /= 3→3 [19-02-26 02:17:25:126 JST] x %= 3→0 |
2. 制御構文
プログラムを記述していく上で、『分岐処理』と『繰り返し処理』の記述はかなりマストになってきます。
if文の条件式は比較する値が『一致していたら…』,『一致していなかったら』…など日本語でいうところの『もし〜であれば…』と表現することができる処理のことです。以下コードを実行してみます。
その前に…(笑)
しっかりと分岐処理を入る手前で『比較演算子』について覚えないといけません!
『==』と『===』は何が違うの?って疑問に思う方もいると思いますが、理解していないとプログラムが思わぬ結果をもたらす場合があるので、しっかりと覚えましょう!
比較演算子
== | 左辺と右辺が等しければtrue | 1 == 1 //true 1 == ‘1’ //true |
!= | 左辺と右辺が等しくなければtrue | 1 != 1 //false 1 != 2 //true |
< | 左辺が右辺より小さければtrue | 1 < 2 //true 2 < 2 //false |
<= | 左辺が右辺以下であればtrue | 1 <= 2 //true 2 <= 2 //true |
> | 左辺が右辺より大きければtrue | 1 > 2 //false 2 > 2 //false |
>= | 左辺が右辺以上であればtrue | 1 >= 2 //false 2 >= 2 //true |
=== | 左辺と右辺がデータ型も含めて等しければtrue | 1 === 1 //true 1 === ‘1’ //false |
!== | 左辺と右辺がデータ型も含めて等しくなければtrue | 1 !== 1 //false 1- !== ‘1’ //true |
1 2 3 4 5 6 7 8 9 |
function myFunction() { if(1 < 2){ Logger.log('1 < 2の結果がTRUEだったら実行されます'); //結果が表示される } if(2 < 1){ Logger.log('2 < 1の結果がTRUEだったら実行されます'); //結果が表示されない } } |
ログ結果はこんな感じ。
1 |
[19-02-26 02:33:47:166 JST] 1 < 2の結果がTRUEだったら実行されます |
if文でやった処理は『一致していたら…』という処理のみでしたが、次は処理が『一致していたら…』,処理が『一致していなかったら』という分岐文を追加していきます。
elseは結果がtrueじゃなかったら実行されます。
1 2 3 4 5 6 7 8 9 10 11 |
function myFunction() { if(1 < 2){ Logger.log('1 < 2の結果がTRUEだったら実行されます'); } if(2 < 1){ Logger.log('2 < 1の結果がTRUEだったら実行されます'); }else{ Logger.log('2 < 1の結果がFALSEだったら実行されます') } } |
ログ結果はこんな感じ。
1 2 |
[19-02-26 02:38:35:523 JST] 1 < 2の結果がTRUEだったら実行されます [19-02-26 02:38:35:524 JST] 2 < 1の結果がFALSEだったら実行されます |
if文の最後は、else if文です!
簡単に言えば、『もし〜であれば』,『もし〜であれば』,『もし〜であれば』…を繰り返し記述する方法です。
結果がtrue or falseだけでない場合に使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function myFunction() { var x = 10; if(x < 2){ Logger.log('x < 2の結果がTRUEだったら実行されます'); }else if(x < 4){ Logger.log('x < 4の結果がTRUEだったら実行されます'); }else if(x < 6){ Logger.log('x < 6の結果がTRUEだったら実行されます'); }else if(x < 8){ Logger.log('x < 8の結果がTRUEだったら実行されます'); }else if(x < 10){ Logger.log('x < 10の結果がTRUEだったら実行されます'); }else if(x < 12){ Logger.log('x < 12の結果がTRUEだったら実行されます'); }else{ Logger.log('該当なしだったら実行されます'); } } |
ログ結果はこんな感じ。
1 |
[19-02-26 02:47:51:671 JST] x < 12の結果がTRUEだったら実行されます |
if文による条件分岐では、条件式がtrueかfalseかといった2通りしか分岐を出来ずelse if~を使って条件式を追加することで実現しましたが、『switch文』を使うことでよりシンプルに表現することが出来ます。
※各caseの末尾にある『break』文は省略することが出来ますが、他のも実行されるケースがあるので省略非推奨です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function myFunction() { var x = 10; switch (x){ case 2: Logger.log('x = 2の結果がTRUEだったら実行されます'); break; case 4: Logger.log('x = 4の結果がTRUEだったら実行されます'); break; case 6: Logger.log('x = 6の結果がTRUEだったら実行されます'); break; case 8: Logger.log('x = 8の結果がTRUEだったら実行されます'); break; case 10: Logger.log('x = 10の結果がTRUEだったら実行されます'); break; default: Logger.log('該当なしだったら実行されます'); break; } } |
ログ結果はこんな感じ。
1 |
[19-02-26 03:07:05:226 JST] x = 10の結果がTRUEだったら実行されます |
while文では、同じような処理を何度も繰り返し実行したい場合に、一つのスクリプトを記述することで指定する条件が来る(条件のtrueが終わる)まで処理を繰り返してくれます。
for文と違うのはfor文の場合、特定の数値が繰り上がってその数値まで実行するというものですが、while文の場合は条件式を指定することが出来ます。
※繰り返し処理を記述する場合、無限ループにならないように気をつけましょう
1 2 3 4 5 6 7 8 |
function myFunction() { var x = 10; while(x < 50){ x += 10; Logger.log('xの値→' + x); } } |
ログ結果はこんな感じ。
1 2 3 4 |
[19-02-26 03:17:06:763 JST] xの値→20 [19-02-26 03:17:06:763 JST] xの値→30 [19-02-26 03:17:06:764 JST] xの値→40 [19-02-26 03:17:06:764 JST] xの値→50 |
for文では、同じような処理を何度も繰り返し実行したい場合に、一つのスクリプトを記述することで指定する条件が来る(条件のtrueが終わる)まで処理を繰り返してくれます。
while文と違うのはwhile文の場合、特定の条件式を記述しその条件がまでtrueの間は実行するというものですが、for文の場合は特定の数値が繰り上がってその数値まで実行していきます。
※繰り返し処理を記述する場合、無限ループにならないように気をつけましょう
1 2 3 4 5 6 7 |
function myFunction() { var x = 10; for(i = 0; x > i; i++){ Logger.log('iの値→' + i); } } |
ログ結果はこんな感じ。
1 2 3 4 5 6 7 8 9 10 |
[19-02-26 03:21:41:957 JST] iの値→0 [19-02-26 03:21:41:957 JST] iの値→1 [19-02-26 03:21:41:958 JST] iの値→2 [19-02-26 03:21:41:958 JST] iの値→3 [19-02-26 03:21:41:959 JST] iの値→4 [19-02-26 03:21:41:960 JST] iの値→5 [19-02-26 03:21:41:960 JST] iの値→6 [19-02-26 03:21:41:961 JST] iの値→7 [19-02-26 03:21:42:172 JST] iの値→8 [19-02-26 03:21:42:173 JST] iの値→9 |
余談…
switch文の中で処理を中断するためにbreak文を使用しましたが、繰り返し処理の中でもbreak文を使用することが可能です。以下コードはiのカウント数が5だった場合にtrueとしてbreak文が実行されます。
1 2 3 4 5 6 7 8 9 10 |
function myFunction() { var x = 10; for(i = 0; x > i; i++){ Logger.log('iの値→' + i); if(i === 5){ break; } } } |
ログ結果はこんな感じ。
1 2 3 4 5 6 |
[19-02-26 03:24:05:831 JST] iの値→0 [19-02-26 03:24:05:831 JST] iの値→1 [19-02-26 03:24:05:832 JST] iの値→2 [19-02-26 03:24:05:832 JST] iの値→3 [19-02-26 03:24:05:833 JST] iの値→4 [19-02-26 03:24:05:833 JST] iの値→5 |
今回はここまでです!
switch文やwhile文など、全く使ったことなかったですがシンプルに書きやすいなって感じたので次から使っていきたいなって思いました。
最後までお付き合い頂き、ありがとうございました!