ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】案外難しいAutoHotkey。

何気なく書いたif文でめちゃくちゃはまりました。
大抵の言語ではかっこは計算や比較の優先順位を決めるだけのもので括弧内の結果は変わりませんよね。
次のようにコードを書いた時、全て条件は成立してメッセージボックスが表示されるかと思います。

    left := 100
    right := 100
    If left = %right% 
        MsgBox, test1 ok
    If (left = right)
        MsgBox, test2 ok
    If (left = %right%)
        MsgBox, test3 no output 
    If left = right
        MsgBox, test4 no output

ところが実行してみると1と2のケースだけメッセージボックスを表示しますが、3と4では条件不成立で表示されません。
なんでじゃあ。
目を皿のようにしてもおかしいところは見つかりません。

自分なりに考えたのはこんな理由です。
If 文が数値または変数を比較するための構文なので%による展開を受け入れることができる。
括弧でくくった場合は=演算子が使われるので%による展開が受け入れられない。
3のケースは括弧で括られているために括弧内で=演算子が利用されて %が展開されずに文字列”%right%“として扱われている。
4のケースではif 文の条件式だから、右辺には文字列と変数どちらも想定されるので、変数rightが%展開されずに文字列”rightとして扱われている。

ahkwiki.net
ahkwiki.net

if 文と=演算子は挙動が違うのですね 。