のら(NORA)のブログ

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

autohotkey2.0勉強中(翻訳)その5(変数編)

はじめに

翻訳とかあんま得意じゃないんだけど、とりあえず変数の所らへん自分なりにまとめたやつ
変数と式がひとまとめになってたけど長いので分けた
まあwiki見ればいいよねこんなん見るより。
間違いあったらコメくれれば訂正します。というか自分用だし、間違えて覚えてしまうから(´・ω・`)

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

変数編

変数の型

  • 変数やコマンドの引数として使われる値は、すべて文字列として保持される
  • 明示的に定義された変数の型はなくて、任意の変数に文字列、整数、浮動小数点数、またはオブジェクトへの参照を代入することができる
  • また、数値は必要に応じて文字列に自動的に変換される
  • 変数の型を判別したい場合はType関数を使用することで判別することができる
  • 値が特定のフォーマットの場合、整数、小数、日付時刻として計算などで使うことができる
  • どのような書式が 各コマンドが出力する整数・小数の文字列表現フォーマットなのかは、SetFormatコマンドで設定できる

変数のスコープと宣言

  • 関数のローカル変数を除いて、すべての変数はグローバルで、その内容はスクリプトの任意の部分によって読み取られたり変更されたりする可能性がある
  • 関数ページに記載されている場合を除いて、変数は宣言する必要はなく、変数を使用することによって存在するようになる(そして、各変数はemptyまたはblankで始まりる)

変数の名前

  • 変数名では大文字と小文字は区別されない(たとえばCurrentDateはcurrentdateと同じ)
  • 変数名は最大253文字で、文字、数字、アンダースコア、ASCII以外の文字で構成され、変数名は数字で始めることはできない

予約語

以下の単語は演算子として、もしくは制御フロー文の名前として予約または使用されているため、変数名として使用できない
関数、クラス、およびウィンドウグループでも変数と同じ検証を使用するためこれらの単語が使えない
abc順

andbreakcatch
containscontinueelse
FinallyForGosub
GotoIfin
isLoopLoopF​​ile
LoopParseLoopReadLoopReg
newnotor
ReturnThrowTry
UntilWhile

変数への値の代入(格納)

  • 変数に値を代入するには「:=」の後に数字、引用符付き文字列、または他のタイプの式を書く
  • ahk2からは「=」は使えず、「:=」に統一された←ここ重要
ex: 代入の例  
Var := 123  ;数値*123*の代入  
Var := "Var" ;文字列*Var*の代入
  • 値が割り当てられていない変数には、デフォルトで空(blank/null)の文字列が含まれている

変数に割り当てられたメモリの解放

ex: Var := "" という風に空の値を割り当てることで、割り当てられたメモリを開放できる
  • 変数には、コマンドの出力変数として間接的に値を割り当てることもできる

関数の出力変数を用いて間接的に変数への代入

ex: WinGetTitle *Title*, A アクティブウィンドウのタイトルを関数の出力変数*Title*に代入
  • 変数が整数の場合、64ビット整数(long)相当の値が扱える
  • 変数が少数の場合、double値相当の値が扱える
  • 変数とは別に、環境変数(後述)も扱うことが出来る
  • EnvSetコマンドで環境変数に代入する
  • この環境変数は、Runコマンドなどで起動したプログラム内から参照できる
  • 変数の展開では、通常の変数も環境変数も展開できるが、未定義の変数は長さ0の文字列に展開される
  • 1変数の容量の上限は64KBである(#MaxMem指令で変更可能)
  • 組み込み変数は「組み込み変数」を参照

変数の値(内容)を取得する

  • 変数の内容を文字列に含めるには、変数名をパーセント記号「%」で囲めばいい
ex: MsgBox、変数Varの値は%Var%です  
MsgBox( "変数Varの値は%Var%です" )
  • また、パーセント記号「%」は式の変数参照(引用符付き文字列以外、式内など)では省略していい
ex: MsgBox( "XとYの合計は(X + Y)です" )

エスケープシーケンス

  • ファイルパスの「\」のエスケープの必要をなくすため、エスケープ文字は「`」(Shift+@)になっている
  • 以下に示すエスケープシーケンスが使える
  • それ以外の文字をエスケープした場合、その文字自身になる(例:「`x」→「x」)
  • EscapeChar指令でエスケープ文字を変更できるらしい

  • 任意のコマンドの最初のカンマを省略することができる
  • (最初の引数が空白の場合や::=などの代入演算子で開始する場合、またはコマンドが継続セクションの一番上にある場合を除く)
  • 例外1:MsgBox内のカンマはエスケープする必要はない
  • 例外2:コマンドの最後の引数のカンマはエスケープする必要はない

エスケープシーケンス一覧

  • コマンドの区切りと区別するため、エスケープが必要
  • なお、コマンドの最後の引数内では、文字としてのカンマであることが自明なため、カンマをエスケープする必要は無い
  • `; 「;」で、半角スペースかTab文字の次に来る場合のみ、コメントの開始記号と区別するためにエスケープする必要がある
  • `:: 文字列「::」(コロン二つ)ホットストリングなどで使用
  • `% 「%」(パーセント記号)
  • `n 改行(LF/0x0A)
  • `r 復帰(CR/0x0D)
  • `t Tab文字(0x09)
  • `v 垂直Tab(0x0B)
  • `b BackSpace文字(0x08)
  • `a Bell文字(0x07)
  • `f 改ページ(0x0C)
  • `` 「`」自身なんかバックスラッシュ二個と同じ意味合いをもつらしい
  • `, 「,」(カンマ)の文字 プログラム最後のカンマとMsgBoxではエスケープしなくていい
  • `“または`‘ 一重引用符と二重引用符は同じ意味を持つが、一重引用符で囲まれた文字列の中では二重引用符を使用するとそのまま二重引用符が扱える、説明しにくいので以下の例を見て
ex:一重引用符の中に二重引用符を用いる例で、以下の二つは同じ結果  
Var := "The color \`"red\`" was found."  ;「"」をエスケープ「\`"」して書いた場合  
Var := 'The color "red" was found.'  ;「'」で囲んでいるので中にある「"」はエスケープしなくてもよい

Sendモードにおけるエスケープシーケンス

Sendコマンドまたはホットストリングをデフォルト(非raw)モードで使用すると、{} ^!+#などの文字は特別な意味を持つため、
これらを文字通り使用するには、中括弧で囲む

ex: Send {^} {!} {{}

次→(autohotkey勉強中その6)