演算子
演算子は主に計算、比較、そしてバイナリビットの操作で使用されます。
演算子はその重要度(優先順位)に従って評価されます。
たとえば、計算では掛け算(x)は足し算(+)より優先されるため、
2 + 3 x 2
は 10
ではなく 8
となります。優れた計算機はこの優先順位ルールを守ります。練習として、スマートフォンの計算機アプリでこの挙動を確認してみてください。
以下の表は、優先順位が高い順に演算子をリストアップしたものです。
数学演算子
演算子 | 説明 |
---|---|
-x | 否定 |
* / % | 掛け算 / 割り算 / 余り |
+ | 足し算 |
- | 引き算 |
余り(%)は整数に適用され、次のように動作します:
5 % 2
は 1
となります。なぜなら、5 を 2 で割ると商が 2、余りが 1 になるからです。
この演算子(モジュロ演算子とも呼ばれる)の便利な使い方として、カウンタ値の範囲を制限することが挙げられます。割る数を n とすると、カウンタは 0 から n-1 の間をカウントし、n の倍数で 0 に戻ります。この概念を利用したコード例は、後のチュートリアルシリーズで紹介します。
いくつかの代入ショートカットも以下のように利用可能です(これらは他の演算の結果を受け取るため、最も低い優先順位を持ちます):
例 | 同等の操作 |
---|---|
x += 1 | x = x + 1 |
x -= 1 | x = x - 1 |
x *= 2 | x = x * 2 |
x /= 2 | x = x / 2 |
x %= 3 | x = x % 3 |
ブール演算子
これらは主に
if
文で使用される比較および論理演算子です。演算子 | 説明 |
< == > != >= <= | 比較演算子 |
! not | NOT(否定) |
&& and | AND(論理積) |
一般的なタイプミスとして、比較の代わりに代入を意味する等号(=)を 1 つだけ入力してしまうことがあります。しかし、エディタはこれを検出して警告を表示します。
ブール演算の結果は
true
または false
になります。例:
x = 3 > 4 or 5 < 6 # x == true
ビット演算子
注:ビット演算子は、ビット操作を伴う技術的な作業を行わない限り、あまり使用されません。
すべての数字や文字はバイナリビットで構成されています。そのため、ビットを反転させたり、シフトさせたり、マスクしたりすることが可能です。各ビットは 0 または 1 で構成され、デジタル論理ゲートの動作に関連する論理演算に従って設定またはリセットされます。
最初のビットは LSB(最下位ビット)、最後のビットは MSB(最上位ビット)と呼ばれます。0 または 1 のビットで構成される数値はバイナリ数(2 進数)です。
バイナリのカウントは次のように進みます:
0, 1, 10, 11, 100, 101, 110, 111, 1000 …
ただし、エディタでは 10 進数に相当する数値しか表示されません。そのため、8 のバイナリ表現が
1000
であることを想像する必要があります。
練習として、Windows のプログラマ向け電卓(または同等のアプリ)を使用して、バイナリ数を試してみてください。
演算子 | 説明 |
---|---|
~ | NOT(ビットの反転) |
<< >> | 左側のオペランドのビットを n ポジション左/右にシフト |
& | 2 値の論理積 |
^ | 2 値の排他的論理和(XOR) |
| | 2 値の論理和 |
&= |= | 代入ショートカット |
ショートサーキット評価
論理演算子を含む式は、左から右に評価されます。そのため、条件が真または偽であることが確定すると、それ以降の式は評価されません。この仕組みにより、評価が高速化されます。
この知識を活用して、式内の重要または高速な部分を左側に配置することが推奨されます。
例:
func _ready(): var x = 4 var y = 6 if x < y or x > 0: # x < y の評価だけで十分 print("ok") var label = Label.new() # label が存在することを確認してから右側を評価 if label and label.text == "": label.text = "Hello"
まとめ
数学、ブール、ビット演算子を実用性の高い順に学びました。GDScript の一部の演算子はより高度なトピックに含まれるため、このセクションでは省略していますが、今後のチュートリアルで紹介しますのでお楽しみに!