たとえば、次の式の場合:
var a, b, c int = 16, 4, 2
d := a + b*c
式a + b * c
数学的規則に従って導出された場合、最初に乗算を計算し、次に加算を計算する必要があります。b b * c
の結果は 8 で、 a + 8
の結果はは 24 なので、d の最終値も 24 になります。実際、Go言語でもこのように扱われており、まず掛け算を計算し、次に足し算を計算するのはデータ上のルールと同じであり、読者自身が検証することができます。
最初に乗算を計算し、次に加算を計算します。これは、乗算演算子の優先順位が加算演算子の優先順位よりも高いことを示します。いわゆる優先度は、同じ式内に複数の演算子が出現する場合に、どの演算子が最初に実行されるかを指します。
Go 言語には数十の演算子があり、十数のレベルに分かれています。優先順位が異なる演算子もあれば、同じ優先順位を持つ演算子もあります。以下の表を参照してください。
優先順位 | 分類 | オペレーター | 組み合わせ |
---|---|---|---|
1 | カンマ演算子 | 、 | 左から右へ |
2 | 代入演算子 | =、+=、-=、*=、/=、%=、>=、<<=、&=、^=、|= | 右から左へ |
3 | 論理的または | || | 左から右へ |
4 | ロジックと | && | 左から右へ |
5 | ビットごとまたは | | | 左から右へ |
6 | ビット単位の XOR | ^ | 左から右へ |
7 | ビットごとの AND | & | 左から右へ |
8 | 等しい/等しくない | ==、!= | 左から右へ |
9 | 関係演算子 | <、<=、>、>= | 左から右へ |
10 | シフト演算子 | <<,>> | 左から右へ |
11 | 足し算・引き算 | +、- | 左から右へ |
12 | 乗算/除算/剰余 | *(乗算記号)、/、% | 左から右へ |
13 | 単項演算子 | !、* (ポインタ)、&、++、–、+ (正符号)、- (負符号) | 右から左へ |
14 | 後置演算子 | ( )、[ ]、-> | 左から右へ |
注: 優先度の値が大きいほど、優先度が高くなります。
すべての演算子の優先順位を一度に覚えるのは簡単ではありませんが、幸いなことに、Go 言語のほとんどの演算子の優先順位は数学の優先順位と同じであり、今後のプログラミング プロセスで徐々に慣れることになります。本当に混乱している場合は、次のように括弧を追加できます。
d := a + (b * c)
括弧の優先順位が最も高く、括弧内の式が先に実行されるため、各演算子の実行順序が一目瞭然です。
演算子の結合性とは、同じ優先順位の演算子が同じ式内にあり、括弧がない場合、オペランドの計算順序には通常、左から右と右から左の 2 つの方法があることを意味します。たとえば、 +
のとおりです。加算演算子は左から右に向かうため、式a + b + c
は(a + b) + c
として理解できます。