演算子
Googleスプレッドシートの操作を中心にGAS(GoogleAppsScript)の基本コードを紹介しています。初心者の方が順番に読んでくだけでGASの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”演算子”について紹介します!
演算子とは
演算子は、値や変数に対して何らかの処理を行う記号のことです。算数や数学などでお馴染みの四則演算のような処理を行うものを”算術演算子”と言いますが、プログラミンでは、他にも様々な種類の演算子があります。
算術演算子
算術演算子の一覧
演算子 | 説明 |
---|---|
+ | 加算(足し算) 文字列の結合 |
– | 減算(引き算) |
* | 乗算(掛け算) |
/ | 除算(割り算) |
% | 剰余(余り) |
これは簡単なのでサラッといきます。
次のコードを実行して試してみましょう。
function test(){
var a = 10;
var b = 8;
Browser.msgBox(a + b) // 18
Browser.msgBox(a - b) // 2
Browser.msgBox(a * b) // 80
Browser.msgBox(a / b) // 1.25
Browser.msgBox(a % b) // 2
Browser.msgBox(-a) // -10
}
実行動画
「%」はあまり馴染みがないかもしれないですね。10を8で割ると1余り2になるので、あまりの2だけが表示されます。プログラミングしてるとちょこちょこ余りだけ知りたくなることがあります。
算数や数学と一緒で、一つの式に複数の算術演算子がある場合は優先順位が決まっています。
優先順位 | 演算子 | 内容 |
---|---|---|
1 | () | 丸括弧 |
2 | – | 符号を反転 |
3 | * | 乗算(掛け算) |
3 | / | 除算(割り算) |
3 | % | 剰余(余り) |
4 | + | 加算(足し算) |
4 | – | 減算(引き算) |
4 | + | 文字列の結合 |
上の表のような優先順位が決まっているので、この順番で処理が行われます。
大体馴染みあるものだと思いますが、「+」で行われる文字列の結合は、普段はあまり使わないと思います。「+」プラスは、処理する対象のデータ型によって処理が変わります。数値同士であれば加算、文字列同士だと文字列の結合になります。数値と文字列の組み合わせのときはどうなるでしょうか?次のコードで試してみましょう。
function test(){
var a = 10;
var b = 8;
var c = "ひらちん"
var d = "の部屋"
Browser.msgBox(a + b) // 数値同士 18
Browser.msgBox(c + d) // 文字列同士 ひらちんの部屋
Browser.msgBox(a + d) // 数値+文字列 ??
Browser.msgBox(c + b) // 文字列+数値 ??
}
実行動画
「数値+文字列」も「文字列+数値」も、いずれも文字列結合になりましたね。このように、「+」の処理はどれかが文字列だと、文字列結合で処理されます。
インクリメント演算子とデクリメント演算子
GAS(Javascript)には、数値を1だけ増加や減少させるような処理専用の演算子が用意されています。
初心者の方は、なんで?って思うかもしれませんが、むちゃくちゃ使うからです笑
1だけ増加が「インクリメント」、1だけ減少が「デクリメント」と言います。
演算子 | 説明 |
---|---|
++ | インクリメント |
— | デクリメント |
次のように使います。
インクリメント
変数++
or
++変数
function test(){
var a = 1;
a++; // aを1増加させる
Browser.msgBox(a) //2
}
実行動画
aが1増えているのが分かりますね。
デクリメント
変数--
or
--変数
function test(){
var a = 1;
a--; // aを1減少させる
Browser.msgBox(a) //0
}
実行動画
aが1減少しているのが分かりますね。
ここで注意したいのは、インクリメントとデクリメントは、変数の前に置く場合と、変数の後ろに置く場合で挙動が異なるということです。
次のコードの例を見てみましょう。
変数をインクリメントすると同時にメッセージボックスで呼び出しすコードです。記号を後ろにつけている場合と前につけている場合両方行っています。
function test(){
var a = 10;
Browser.msgBox(a++) // 変数の前
var b = 10;
Browser.msgBox(++b) // 変数の後
}
さてどのような結果になるでしょうか?
分かりましたか?
変数aは後ろにインクリメントつけた状態でメッセージボックスに表示させましたが、表示は10でした。
変数bは前にインクリメントをつけた状態でメッセージボックスに表示させると、表示は11になりました。
実は、インクリメントを後ろに付けた場合は、「先に変数を表示させてから1増加させる」順番になります。逆に前受につけると、「先に1増加させてから変数を表示する」順番になります。
試しに、変数aをインクリメントした後に、もう一度表示させてみましょう。
function test(){
var a = 10;
Browser.msgBox(a++); // 変数の前
Browser.msgBox(a); // もう一度メッセージボックスで表示
}
実行動画
1回目のメッセージボックスは10が表示され、2回目の表示は11になっていましたね。「a++」の段階では、加算前の変数が返され、その後加算されて、次のメッセージボックスのときに、「a」が11と1加算されていることが分かります。これは、デクリメントも1減算になるという以外の挙動は同じです。
このように、付ける場所によって挙動が変わるので注意が必要です。
代入演算子
変数に値を代入するときに、これまでも「=」記号を使ってきましたが、このように変数に値を代入する演算子が”代入演算子”です。
次のようなやつです。
var a = "ひらちんの部屋" // この「=」
演算子 | 説明 |
---|---|
= | 左辺の変数に値を代入 |
ここで新しく紹介するのは、”複合代入演算子“と呼ばれるものです。算術演算子と「=」が組み合わさったものです。次の一覧を見てください。
演算子 | 説明 |
---|---|
+= | 左辺の値に右辺の値を足して代入 |
-= | 左辺の値から右辺の値を引いて代入 |
*= | 左辺の値に右辺の値を掛けて代入 |
/= | 左辺の値を右辺の値で割って代入 |
%= | 左辺の値を右辺の値で割った余りを代入 |
“複合代入演算子“は左辺の変数の値と右辺の値を計算すると同時に結果を変数に代入します。
“複合代入演算子”はそれ自体は使わなくてもコードは掛けますが、コードをシンプルに短く書かけるようになります。非常によく使われるものなので、他人が書いたコードを読む機会もあると思いますので必須の知識と言えます。
先程の表の「=」以外の複合代入演算子を、複合代入演算子を使わなかったときと比べて確認してみましょう。
// 足し算
function test1(){
var a = 10 // 変数
a += 1 // 11
Browser.msgBox("a:" + a)
var b = 10 // 変数
b = b + 1 // 11
Browser.msgBox("b:" + b)
}
// 引き算
function test2(){
var a = 10 // 変数
a -= 1 // 9
Browser.msgBox("a:" + a)
var b = 10 // 変数
b = b - 1 // 9
Browser.msgBox("b:" + b)
}
// 掛け算
function test3(){
var a = 10 // 変数
a *= 3 // 30
Browser.msgBox("a:" + a)
var b = 10 // 変数
b = b * 3 // 30
Browser.msgBox("b:" + b)
}
// 割り算
function test4(){
var a = 10 // 変数
a /= 2 // 5
Browser.msgBox("a:" + a)
var b = 10 // 変数
b = b / 2 // 5
Browser.msgBox("b:" + b)
}
// 余り
function test5(){
var a = 10 // 変数
a %= 6 // 4
Browser.msgBox("a:" + a)
var b = 10 // 変数
b = b % 6 // 4
Browser.msgBox("b:" + b)
}
上のコードにあるように、それぞれのプログラムで、変数「a」のコードと、変数「b」のコードは同じ意味です。
実際に、コードを実行した動画で見てください。
変数「a」のコードと変数「b」のコードの結果が同じになることが確認出来ました。
まとめ
今回は、演算子についてまとめました。プログラムの中では何度も出てくるものになりますのでしっかり覚えてくださいね。次回以降で予定している”制御構文”を覚えることで、スプレッドシートを操作する上での様々なプログラムを書くことが出来るようになる予定です!
コメント