概要

x:=(a+b)*10
if(x>1000){
    func(x+y,1)
}

演算子や関数呼び出し、「()」などを組み合わせて、複雑な処理が行える。
式の結果は変数に代入したり、分岐の条件に使用できる。
単に関数の実行のみを行うことも可能。

また、一部のコマンドに用意されている数値を単独で指定するタイプの引数では、式で値を指定することもできる。
それ以外の引数でも、「% a+b」のように引数の最初に「%」と空白文字をつければ、式を指定できる。

getSomeValue()>0 or die()

上記のように、「or」演算子が左辺が偽の時のみ右辺の評価を行うことなどを利用すれば、「関数の結果が0より大きくなければ別の関数を実行」というような処理を式だけで記述することも出来る。
ただし、下記のような代入式か関数呼び出し以外で始まる式は、不正な行とみなされてしまう。

0<(x:=getSomeValue()) or die()

変数

各種コマンドの引数で使う場合と異なり、式中で変数を使う場合は、「%」で挟まずにそのまま変数名を書けばよい。

下記のように、式中に「%」ではさんで変数名を書くと、その内容が展開された上で、変数名として扱われる。
前後の変数名として妥当な文字とあわせて変数名として扱われる。

Var1:=100,Var2:=10,Index:=1,VarName:="Var2"
MsgBox,% Var%Index%+%VarName%
a:=1,b:=2,c:=3,xxx1xxx23xxx:=10000
MsgBox,% xxx%a%xxx%b%%c%xxx

変数内の文字列を展開した結果、変数名として正しくない文字列になってしまう場合は、エラーになる。

文字列

showmessage("He said ""hello""")

文字列は、「"」で挟む。
空の文字列を表すには、「""」と2つ続けて書けばよい。
文字列中に「"」を含めたい場合、「"」の代わりに「""」と2つ続けて書く。

text:=
MsgBox,% text

式の内容が空の場合、空の文字列とみなされる。

数値

SetFormat,FLOAT,0.1
MsgBox,% 0.1+0.2
MsgBox,% 10/3
MsgBox,% 10/3 + 10/3 + 10/3

算術演算子のどちらかが小数値だった場合、結果は小数値になる。
また、演算結果が小数になる場合も、自動的に小数値になる。

算術演算の結果が小数の場合、計算途中は浮動小数点値で保持され、最終的にSetFormatコマンドで指定された形式で変数に格納される。

「1/0」「x+*y」などのように、正常に処理できない演算は、空の文字列として扱われる。

真偽値

if()や「!」「NOT」「AND(&&)」「OR(||)」などの論理演算子では、被演算子となる式が真偽値として扱われる。

「<」「>」「<=」「>=」「=」「==」「<>」「!=」のような比較演算子の演算結果は、条件に一致した場合真、一致しなかった場合偽とみなされる。
数値は、「0.0」や「0」が偽、それ以外は真とみなされる。
空の文字列は偽、1文字以上の文字列は真とみなされる。

比較演算子や論理演算子の結果は、真の場合は「1」、偽の場合は「0」になる。

真を表す「true」、偽を表す「false」という組み込み変数が用意されている。

論理演算の省略

式中で「and」や「or」の演算でつながれた論理式を実行する場合、左から実行し、答えが確定した時点で評価を終了する。
たとえば、「a or b」では、「a」がtrueの場合、式全体がtrueになることは明らかなので「b」の評価は行われない。
同様に、「a and b」では、「a」がfalseの場合、式全体がfalseになることが明らかなので「b」の評価は行われない。
式中の関数呼び出しは評価時に実行されるので、「a or B()」のような式では、「B()」が実行されない場合がある。

演算子

式中で使用できる演算子には、以下のものがある。
詳細はリンク先の個別説明を参照。

文字列演算子

.(文字列連結)

算術演算子

-(符号反転), +(加算), -(減算), *(乗算), /(除算), //(割り切らない除算), **(べき乗), ++/--

ビット演算子

~(ビット反転), |(ビット論理和), &(ビット論理積), ^(ビット排他的論理和), >>(論理右シフト), <<(左シフト)

論理演算子

!(論理否定), ||(論理和), ||(論理積)

比較演算子

>(大なり), <(小なり), >=(以上), <=(以下), =(大文字小文字無視の等値), ==(等値), !=(非等値)

アドレス演算子

&(アドレス), *(アドレスに格納された値)

その他

各種代入演算子, ?:(条件), ,(カンマ区切りで複数の式を評価)