Kuinにおける演算子と優先順位は表1-1の通りです。
括弧なしに演算子が使われたとき、優先順位が小さい演算子のほうが先に計算されます。 優先順位が同じ演算子が並ぶと、結合が左なら左側の演算子が、結合が右なら右側の演算子が先に計算されます。
それぞれの演算子について、以下で詳しく説明します。
関数を呼び出す演算子です(図2-1)。
関数呼び出しの仕様は図2-2の通りです。
1つの式の中に関数呼び出しを複数書いた場合、関数が呼び出される順序は不定です。 副作用がある関数を複数呼び出すときには、呼び出し順序が影響しないようにご注意ください。 ただし「&」「|」「?(,)」演算子においては、式が必ず左から順番に評価され、不要な式は評価がスキップされる仕様なため、関数呼び出しの順序も左から呼び出される前提で書くことができます。
配列の要素を参照する演算子です(図3-1)。
配列参照の仕様は図3-2の通りです。
値のメンバを参照する演算子です(図4-1)。
メンバ参照の仕様は図4-2の通りです。
メンバとは、クラスにおけるメソッドとプロパティ、および型に応じて用意されている組み込みメソッドのことです。
値を指定した型に変換する演算子です(図5-1)。
キャストの仕様は図5-2の通りです。
キャストしようとしたクラスの型が、そもそもそのクラスや親クラスになり得ない型だった場合、コンパイル時にエラーになります。
変換できる型には制約があり、表5-1の通りです。
表5-1: キャストできる型
変換前の型 |
変換できる型 |
int |
int、float、char、bool、ビット型、列挙型 |
float |
int、float、ビット型 |
char |
int、char、ビット型 |
bool |
int、bool、ビット型 |
ビット型 |
int、float、char、bool、ビット型、列挙型 |
列挙型 |
int、ビット型、列挙型 |
クラス |
クラス |
値を、[]bit8型のバイナリ列に変換する演算子です(図6-1)。
バイナリ符号化の仕様は図6-2の通りです。
バイナリ符号化演算子によって変換された[]bit8型のバイナリ列を、値に復元する演算子です(図7-1)。
バイナリ復号化の仕様は図7-2の通りです。
aのb乗を計算する演算子です(図8-1)。
冪の仕様は図8-2の通りです。
プラスやマイナスの符号を表す演算子です(図9-1)。
符号の仕様は図9-2の通りです。
真偽を反転させる演算子です(図10-1)。
論理否定の仕様は図10-2の通りです。
配列などの要素数を取得する演算子です(図11-1)。
要素数演算子の仕様は図11-2の通りです。
クラスなどのインスタンスを生成する演算子です(図12-1)。
インスタンス生成の仕様は図12-2の通りです。
例えば、「#[3,2]int」とすると、3×2の要素の「[][]int」型の2次元配列が返ります。
インスタンスをディープコピー(参照ではなく値を複製)する演算子です(図13-1)。
ディープコピーの仕様は図13-2の通りです。
乗算の仕様は図14-2の通りです。
除算の仕様は図15-2の通りです。
剰余の仕様は図16-2の通りです。
加算の仕様は図17-2の通りです。
減算の仕様は図18-2の通りです。
2つの配列を連結する演算子です(図19-1)。
配列連結の仕様は図19-2の通りです。
2つの値を比較する演算子です(図20-1)。
比較演算子の仕様は図20-2の通りです。
2つの参照を比較する演算子です(図21-1)。
参照比較演算子の仕様は図21-2の通りです。
クラスのインスタンスが指定したクラスの型もしくはその親クラスの型かどうかを判定する演算子です(図22-1)。
型比較演算子の仕様は図22-2の通りです。
クラスは継承した子クラスのインスタンスを継承元の親クラスの変数に代入できるため、代入されているインスタンスがどの型であるかを調べるのにこの演算子を使います。
論理積を計算する演算子です(図23-1)。
論理積の仕様は図23-2の通りです。
論理和を計算する演算子です(図24-1)。
論理和の仕様は図24-2の通りです。
真偽に応じて値を返す演算子です(図25-1)。
条件演算子の仕様は図25-2の通りです。
変数に値を代入する演算子です(図26-1)。
代入演算子の仕様は図26-2の通りです。