ぺんちゃん日記

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

【AutoHotkey】連想配列を使って警告メッセージボックスを表示する処理を簡潔に書く。前編

f:id:yasushiito:20190403184928p:plain

配列でプログラムを簡潔に。

Auto HOT key に関わらず、プログラミングを始めるとすぐに処理の手順は同じだけど使うデータが違うという状況に出くわすと思います。

例えば操作したいウィンドウが見つからなくて処理の続行が不可能の場合。
ダメなプログラムでよければ何事もなかったように黙って処理を中断しても良いのですが、ユーザには中断理由が全くわからないので対処できませんよね。
そんな時に警告メッセージを表示させるのが常識なんですが、「ウィンドウが開いていません」みたいなメッセージはあらゆるプログラムで表示されるでしょうから、愚直に作り込んでしまうとプログラムのあちこちで「ウィンドウが開いていません」メッセージを用意する羽目になります。
同じエラーメッセージを何度も落ち込むなんてバカバカしくて仕方ありません。

連想配列を使えば、エラーコードを渡せばそれにふさわしいエラーメッセージを表示させるようなことができます。
これこそが「処理は同じだけどデータだけが違う」やつです。
エラーメッセージよりもエラーコードの方が圧倒的に文字の量が少ないはずです。
内部的にはエラーコードで取り扱って、ユーザ向けにメッセージを表示する時だけエラーコードからメッセージを取り出す。

連想配列は今時の言語なら大抵使えます。ここで覚えておけば後でいくらでも応用が利きます。
もちろんAutoHotkeyでも使えます。

ahkwiki.net

何か色々難しいことが書いてありますが、Objectが連想配列です。
これを変数に入れれば、その変数+キーワードで簡単にデータをセットまたはゲットできます。

実際に使って見る。

動作確認のための小さなプログラムを作ってみました。



Object()で連想配列を準備できます。
変数warnMessageに初期化した連想配列を入れています。

連想配列に値をセットしたり取り出したりするには二つの方法があります。
中にキーワードを入れるタイプ。
もう一つは. (ドット)の後ろにキーワードを入れるタイプ。
違いを確認してみます。

サンプルで動作を確認してみると次のことがわかります。
変数warnMessageに a b c dの四つの文字列、さらに数値の200をキーワードとしてメッセージを代入しています。タイプで代入して.タイプで参照することもできます。
キーワードには文字列だけでなく数値も使えます。
ただし文字列で代入した場合は文字列でないと参照できません。
同様にキーワードを数値で代入したら参照するときも数値にします。
確実な記述法はタイプです。タイプが入力する文字の量が多くてぱっと見わかりづらので、エレガントに書きたい人はドットタイプで書くことが多いです。

気をつけて落とし穴。

注意点は2点あります。
キーワードに文字列型を選択して[]タイプの記述法とる時には必ずダブルクォーテーションで囲んでください。
つまり、代入する時は[”a”] で参照するときも[“a”]とします。
ここでうっかり[a]としてしまうと、変数aの中身をキーワードとします。
aが文字列ではなく変数名と認識されてしまうのですね。

もう一つの注意点がメッセージボックスなどで値を参照する時に%warnMessage.a%のようにパーセントで挟む記述方法が使えません。
実行すると例外が発生して処理を進めることができないのでサンプルではコメントにしてあります。
では連想配列をメッセージボックスで参照できないのでしょうか?
%の後ろにスペースを一つ開ける記述法を使えば参照できます。
メッセージの先頭に% 書いておけば、その行の後ろの変数は %で挟まなくても参照してくれる様です。

時間切れ。

連想配列は便利だから確実に習得したいです。
エラーメッセージを表示する処理の実装までかきあげる予定でしたが、いつもよりはゆっくりめに進めたので、今回は前編ということで一旦ここで終わりにしますね。


この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら