演算¶
演算子優先度(高い順)¶
| 優先度 | 演算子 | 説明 |
|---|---|---|
| 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以降)
後方互換性¶
コロン付き代入演算子(":=")は後方互換性のために残されているが、コロンなしのものと同一の動作をする。