コンテンツにスキップ

演算

演算子優先度(高い順)

優先度 演算子 説明
1 ( ) [ ] カッコ
2 ! 否定
3 ++ -- インクリメント・デクリメント
4 * / % 乗算・除算・剰余
5 + - 加算・減算
6 & フィードバック
7 == != >= <= > < _in_ !_in_ 比較
8 && 論理AND
9 || 論理OR
10 = := 代入
11 += -= *= /= %= およびコロン付き変種 複合代入
12 , カンマ(最低優先度)

型強制(Type Coercion)

オペランドの型が異なる場合、特定の変換ルールが適用される。整数と実数の演算は実数になる。文字列に数値を加算すると、まず数値を文字列に変換する。

ハッシュの演算(Tc600-3以降)

  • +: 相手がスカラーかハッシュなら、両方を文字列にして連結する(IHASH("a",1) + 1 は "a=11")。相手が配列なら、配列の要素ごとに連結する
  • - * / %(複合代入を含む): 警告 W0024 を出す。意味のある結果にはならない
  • ==: ハッシュ同士なら、要素数・キー・値がすべて一致すれば真。ハッシュとハッシュ以外は常に偽

詳細は ハッシュと値の入れ子 を参照。

左結合

同じ優先度の演算子は左から右に評価される。代入の場合は明示的なカッコが必要なことがある。

文字列演算子

_in_ 演算子はサブ文字列の包含を確認する:"or" _in_ "World" は 1(真)を返す。

フィードバック演算子

関数呼び出しで変数に & プレフィックスを付けると参照渡しになり、呼び出された関数が _argv を通じて呼び出し元の変数を変更できる。

配列の要素も渡せる。Tc600-4以降では、ハッシュや入れ子の要素の要素も渡せる(多次元代入)。

func(&_a[1])            // func の中で _argv[0] を書き換えると _a[1] が変わる
func(&_h["sub"]["x"])   // 同じく _h["sub"]["x"] が変わる(Tc600-4以降)

後方互換性

コロン付き代入演算子(":=")は後方互換性のために残されているが、コロンなしのものと同一の動作をする。