のら(NORA)のブログ

主にソフトについて備忘録で(手抜き)書いているのです!ご自由に観覧しやがれ、です。

autohotkey2.0勉強中(翻訳)その7(繰り返しや分岐編)

はじめに

翻訳とかあんま得意じゃないんだけど、繰り返しと条件分岐の所らへん自分なりにまとめたやつ
間違いあったらコメくれれば訂正します。というか自分用だし、間違えて覚えてしまうから(´・ω・`)

参考:ahkwiki日本語版様及び公式ヘルプ

繰り返しや条件分岐

繰り返し処理

  • Loop文で繰り返し処理が使用できる
    • 繰り返し回数や、対象データは組み込み変数として取得できる
  • Continue、Break文が使用できる
  • whileやforのような終了条件を使った繰り返しは出来ないので、自前でIf文とBreak文で記述する必要がある

その他の繰り返し

  • Loop 指定回数の繰り返し
  • LoopFile ワイルドカードなどにマッチするファイルやフォルダそれぞれに対する処理
  • LoopReg レジストリの指定キー以下のキーに対する処理
  • LoopReadFile ファイルを1行ずつ読みながら処理
  • LoopParse 文字列の1文字ごと、あるいは指定の区切り記号で区切られたフィールドごとに処理

サブルーチン呼び出し、ジャンプ

  • Gosub文でサブルーチン呼び出しが、Gotoでジャンプが使用できる
  • Gosubから戻るには、Return文を使用する
  • Goto文はプログラムの可読性が損なわれるので、あまり推奨されない
  • ジャンプ先のラベルは、「LabelName:」のようなコロンで終わる行で記述される
  • また、ホットキーラベルも指定できる

スレッド割り込み

  • 以下のコマンドでも、ラベルによるサブルーチン指定を行う
  • これらの理由によるサブルーチン呼び出しでは、スレッドの割り込みが行われる
    • SetTimer タイマーで定期的に実行されるサブルーチンを指定
    • Menu カスタムメニューを作成し、選択されたときに実行されるサブルーチンを指定
    • GUI GUIを作成し、ボタンが押されたときなどに実行されるサブルーチンを指定
    • OnExit スクリプトが終了するときに実行されるサブルーチンを指定
    • ホットキー 指定されたホットキーが押されたときに実行されるサブルーチンを指定
    • ホットストリング 特定の文字列をタイプしたときにサブルーチンが実行されるように設定

式の代入/条件分岐

  • 前述の変数の代入・計算・条件分岐とは別に、複雑な式を用いた代入や条件分岐も使用できる
  • また、一部のコマンドにある単独で数値を指定するパラメータでは、式で値を指定することもできる
  • それ以外のパラメータでは、「% a+b」のようにパラメータの最初に「%」と半角スペースをつければ、式を指定できる
  • 式の代入/条件分岐では、他のコマンドとは変数の扱い方などが違っている
ex:
Var1 := 100 
Var2 := Var1+10
  • 式の代入には、「:=」を使う
    • 式中で変数を使うときは、「%」ではさまずに、そのまま記述する
    • 数字列は数値として計算される
    • ahk1で使えた「=」は使えない、「:=」に統一されたそのくせ例はそのままで「=」のままなんだよな混乱する(´・ω・`)
ex:
Var1 := 100  
  Var2 := 10  
  Index := 1  
  VarName := Var2  
  Var3 := Var%Index%+%VarName%  
  a := 1  
  b := 2  
  c := 3  
  xxx1xxx23xxx := 10000    
  Var := xxx%a%xxx%b%%c%xxx
  • 式中に「%」ではさんで変数名を書くと、その内容が展開された上で、変数名として扱われる
  • 前後の変数名として妥当な文字とあわせて変数名として扱われる
  • 変数参照を展開した結果が式などになる場合、不正な変数名としてエラーになる
ex: 
If(Name:="Taro" or Name:="太郎")  
MsgBox,He is Taro.
  • 式による条件分岐は上記のように、Ifに続いて式を括弧で囲んで書く 文字列は、「"」で挟む
  • 空の文字列を表すには、「"“」と2つ続けて書けばよい
  • 式中に「"」を含む文字列を使用したい場合、「"」の代わりに「"“」と2つ続けて書く
ex: 
SetFormat,FLOAT,0.1  
Var := 0.0 * 0.0  
 MsgBox,%Var%  
Var := 10/3  
 MsgBox,%Var%  
Var := 10/3 * 10/3 * 10/3  
 MsgBox,%Var%
  • 算術演算子のどちらかが小数値だった場合、結果は小数値になる また、演算結果が小数になる場合も、自動的に小数値になる
  • 算術演算の結果が小数の場合、計算途中は浮動小数点値で保持され、最終的にSetFormatコマンドで指定された形式で変数に格納される
  • 「1/0」「x+*y」などのように、正常に処理できない演算は、空の文字列として扱われる

その他の条件分岐

  • If / IfEqual / IfNotequal / IfLess / IfLessOrEqual / IfGreater / IfGreaterOrEqual 変数の比較(「:=」「<>」「>」「<」「>=」「<=」と同じ)
  • IfExist / IfNotexist ファイルの存在の有無
  • IfInString / IfNotInString 文字列中に指定の文字列が含まれるかどうか
  • If var [not] in values / If var [not] contains values varの内容がvaluesに列挙した文字列と一致するかどうか
  • If var is [not] type 変数のデータ形式
  • IfMsgBox 一番最近のMsgBoxコマンドで押されたボタン
  • IfWinActive / IfWinNotActive 指定したウィンドウがアクティブかどうか
  • IfWinExist / IfWinNotexist 指定したウィンドウが存在するかどうか

各種演算子

文字列演算子

  • Exp1 . Exp2 2つの変数や文字列、式の結果を文字列として連結する
  • Exp1と「.」、「.」とExp2の間にはスペースを空けなければいけない

算術演算子

  • A: 「-」をつけられた項や式は負の値を表す
  • A+B: 加算
  • A-B: 除算
  • A*B: 乗算
  • A/B: 除算
  • A//B: 割り切らない除算
    • たとえば、「7//3」 は 2に、「7//-3」 は -2になる
    • いずれかの被演算子が小数表現だった場合、小数として除算した商を超えない最大の整数に丸められる
    • また、この場合結果は小数表現になる(「7//3.0」 は 2.0、「7//-3.0」 は -3.0になる)
  • A**B: 累乗、AのB乗
  • AとBは共に小数値が使用できる

ビット演算子

  • ビット演算を使用できるのは整数値のみ
  • 小数値は、整数値に変換してから計算される
  • つまり誤差が出る
  • 内部的には64ビット符号付整数で扱われている模様
  • 符号付64ビット整数の範囲(-9223372036854775808..9223372036854775807)の範囲に収まらない場合、65ビット目より上は切り捨てられる
  • ~A: Aのビットを反転する
    • 32ビット符号なし整数の範囲内の値は、下位32ビットだけ反転される
    • (負の値の場合、32ビットでも64ビットでも結果は同じ)
  • A|B: ビットの論理和
  • A&B: ビットの論理積
  • AB: ビットの排他的論理和
  • A>>B: Aを右にBビットだけシフトする
    • 論理右シフトなので、最上位ビットが1でも、開いた左側には常に0が詰められる
    • 算術右シフトをしたいときは、2**Bで割る
  • A<<B Aを左にBビットだけシフトする

論理演算子

  • 数値のゼロや空の文字列は偽(False)として扱われ、それ以外は真(True)として扱われる
  • 論理演算の結果を変数に代入すると、偽(False)の場合「0」、真(True)の場合「1」が代入される
  • ! A(NOT A) 真偽を反転する
    • !のほうが演算子の優先度が高い
  • A || B(A OR B) 論理和
  • A && B(A AND B) 論理積

比較演算子

  • 主に条件分岐で使用するが、比較演算の結果を変数に代入する場合、偽(False)なら「0」、真(True)なら「1」が代入される
  • 数値でないものを比較する場合、文字列として文字コードの並び順で比較される
  • 数値であっても、「"」で囲まれている場合は、文字列とみなされる(ex: 「"10"」)
    • このとき、StringCaseSenseコマンドで設定が変更されない限り、大文字小文字の違いは無視される(「=」「==」を除く)
  • 文字列の演算における大文字小文字の違いは常に無視される

  • A > B: AがBより大きいなら真(True)になる

  • A < B: AがBより小さいなら真(True)になる
  • A >= B: AがB以上なら真(True)になる
  • A <= B: AがB以下なら真(True)になる
  • A = B: AとBが同値のとき真(True)になる
  • A == B: AとBが同値のとき真(True)になる
  • A != B(A <> B): AとBが同値でないとき真(True)になる

アドレス演算子

  • &Var 変数Varの格納されたメモリ領域のアドレスになる
  • *Addr アドレスが整数Addrで表されるメモリ領域のバイト値(0…255)になる
  • 「*Addr := Asc(“x”)」のように代入先にはできない
  • 値を変更するには、「DllCall(“RtlFillMemory”, UInt, Addr, UInt, 1 , UChar, Asc(“x”))」のようにする

次→(autohotkey勉強中その7)