魔術師をめざして

魔術師を目指して、相場・数学・プログラム言語を研究しています。

AutoHotKey(3)

何回か書きそうだからシリーズにしちゃったよ。

f:id:fxrobot:20131220030629p:plain

でも、前回紹介したように、日本語の入門もリファレンスもあるので、それ見りゃわかるのでもういいよって声もあるかもしれない。だから、ちょっと変わった切り口から紹介するのがいいだろうね。

さて、ぼくは今日までに AutoHotKey については、大体は理解できたと思う。
AutoHotKey っておもしろいね。なぜ、もっと早く覚えようとしなかったのだろうって思うけど、AutoHotKey_L が確立してきた今がちょうどよかったといえるかも知れない。

だけど本当だったら、キーのリマップやらから入って AutoHotKey のツールとしての凄さを語るのだろうけど、それはもう認知されているだろうから、ぼくはプログラミング言語としての AutoHotKeyAutoHotKey_L)を今後も書いていこうと思っている。

f:id:fxrobot:20131220031150p:plain

上の①と②は、前回 AutoHotKey には2つの代入があるとして紹介したものだ。今回は③も取りあげた。実は③は②と機能的に同じものだ。②も③も右辺を評価した結果を左辺に代入する。①は無評価でそのままストレートに代入するのであった。

まぁ、結局 ②が普通のプログラミング言語における代入だね。①は RAW 代入というか、RAW(生)文字列の代入と考えればよさそうだ。ただし、AutoHotKey ではその文字列をあとで変数として扱うことも可能なので幾分ややこしいかも知れない。

f:id:fxrobot:20131220031159p:plain

今度は上を見てほしい。今度は If 文の条件部のみを 4つ並べてみた。
実は①~④の 4つは同じ働きをする。

前回も書いたが、ここのところをしっかり理解できれば AutoHotKey はおもしろくなると思う。しかし、それにしてもなんで同じ働きの記述方法がいくつもあるのかと思うことだろう。

Python なら一つの目的には一つの方法。誰が書いても同じになる。(というが、小さなレベルの話しでということだね)こういうところを見ても AutoHotKeyPython 的ではなく、Perl 的だね。

 まとめると、AutoHotKey の If は「If 変数 = 値」という形が基本なので、右辺に変数を持ってきたいのなら、変数を % で囲って評価することで値にしておく必要があるというわけだ。あっ、断っておくが、If のなかの = は代入ではなく数学の = どうよう比較演算のためのもの。えっ、知ってるって、そりゃそうだね。

AutoHotKey はこの調子で % を使って、%MyFunction%(a, b, c) などという動的関数などというものも用意している。

最後に、脈略がなく唐突ではあるが、これを見てもらおう。

f:id:fxrobot:20131220083615j:plain

この 2行でなにをやっているかだね。

in.txt の内容を 1行ずつ読み込んで、改行を除いて、out.txt に 1行ずつ書き出している。なお、in.txt は読み込み専用でオープンし、out.txt は書き込み用にオープンして、Loop を終了する時点で両方ともにクローズしている。

もし、改行をそのままにしたければ、

                    Loop Read, in.txt, out.txt
                            FileAppend %A_LoopReadLine%`n

のように「`n」(改行)を付ければよいだけだ。

Loop, Read に out.txt を書いているのに違和感があるのなら、FileAppend 側に書けばよい。同じように働くのだ。

                    FileAppend [Text, Filename[, Encoding]]

このような形式になっている。

もし、このプログラムを Python で(Ruby でも Perl でも)書いたら何行要するだろう。

そう、AutoHotKey は尖っているのだ。

ぼくは、この AutoHotKey には Io 言語に興味をもったときと同じくらいのおもしろさを感じている。来年は Perl を使おう!と宣言したばかりだが、AutoHotKey を使おう!に変更だな。その舌の根も乾かないうちに信用できないやつだ! ごめんよ。

2014年のフリープログラミング言語は、AutoHotKey、wxBasic、FreeBasic、この辺りに注目だ!ぼくとしてはね。