トップページへ | [ 一覧 | 検索 | 最終更新 ] [ 差分 | 履歴 | 凍結 ] |
演算†基本†C言語と同様の書式で四則演算、比較演算、代入、その他が可能です。 演算子 意味 優先度 ( ) [ ] ブラケット 高い ! 否定 ++ -- 1を足す/1を引く * / % 乗除算、剰余 + - 加減算 & フィードバック == != >= <= > < _in_ !_in_ 比較 && 論理積 || 論理和 = := 代入 += -= *= /= %= +:= -:= *:= /:= %:= ,= 演算して代入 , 汎用配列要素の列挙 低い コロン(":")付きの代入演算子は過去互換性を保持するために残されているもので、機能的にはコロン無しのものと同等です。 *は単項演算子です。 ブラケット( )については次項で詳説します。 foo { "or" _in_ "World" } _in_は左辺の文字列が右辺の文字列に含まれていれば1、含まれていなければ0を返します。!_in_はその逆です。 比較演算子は結果が真であれば整数1を、偽であれば0を返します。 代入でない演算は結果がそのまま出力となります。 foo { (3+2)*4 } この関数fooは20を出力します。 同じ優先度の演算子が連続している場合は、常に左から結合されます。 1+2-3 たとえば上の式は
の順に計算されます。 i = j = 10 これはどうなるでしょう。C言語では代入演算子は右から結合されますから、iとjには10が代入されます。
の順に計算されます。したがって、iには10は入らないのです。 i = (j = 10) これで i にも10が入るようになります。 演算対象の項の型が一致していない場合、結果の型は以下のようになります。
ひとつの演算式内で型が混在していても構いません。 "10+2は" + (10+2) + "です。" 最初に10+2が整数として計算され、結果12が得られます。残りはすべて文字列との加算ですから、12は文字列に変換され、文字列として結合されます。 ブラケット( )による演算順序制御†ブラケット( )で囲んだ部分は演算順序が最優先扱いになります。 answer = (_i = 10) + (2*(_i + 10)) 文の演算則をよく理解している人でないと、answerに何が代入されるかを正確に答えることは出来ないでしょう。 answer = (((_i = 10))) + (2*(_i + 10)) これで代入部分の優先度が一気に引き上げられました。今度は正しい結果が入るはずです。 なお、代入部分を囲むブラケットは2段で十分ではないかと思われるかも知れませんが、それも誤りです。ブラケット2段は_i + 10と同じ深さとなりますが、=と+では優先度が+のほうが高いのです。 フィードバック演算子&†フィードバック演算子&は、他の演算子とは使い方がまったく異なる独特の演算子です。 request { _i = 1 foo(&_i) } foo { _argv[0] = 100 } 関数呼び出しの際に引数として変数を与える場合、その先頭に&を書くことができます。
先頭に&を付けられた変数は、呼び出し先関数の_argvの対応する要素へ関連付けられます。すなわち、_argvを書き換えると、対応する呼び出し元の変数の値も書き換わるようになります。 request { foo(1, 2, &_value, "Hello", &_value2) _value + _value2 } foo { _argv[2] = _argv[0] + _argv[1] _argv[4] = _argv[3] + " World" } 関数requestは "3Hello World" を出力します。 当然のことですが、フィードバック演算子は変数にしか付けられません。 |
最終更新日: 2008-03-23 (日) 17:14:24
|