# プログラミングの基本 - 短期講座第8回(了) -
前回コピーした、または手入力したシンプルなマクロの内容を説明します。
秀丸マクロも、当たり前ですがプログラムの一種です。これから説明する内容は、いろいろなプログラミングに応用できる基本中の基本。ここから学習を発展させていけば、プログラミングを覚えるのはそんなに難しくない...かも。
この説明で、今回の短期集中講座はひとまずおしまいにしたいと思います。
最近、実は秀丸エディタにもマクロ入門みたいなヘルプが付くようになっています。このエントリの後は、そちらを読むといいかもしれません。[ヘルプ]→[マクロヘルプ]を選んで、[マクロを初めて作成する方はこちらへ]のリンクをクリックしてください。
//一発検索マクロ ver1.0
//作成: 2014/06/26 最終更新: 2014/06/26
//コピーした文字列を一発で検索するマクロ
gofiletop;
beginclipboardread;
$sr = getclipboard;
hilightfound 1;
searchdown $sr;
■コメント文
どんなプログラミング言語でも、プログラミングに直接関係ない(=プログラムとしては実行されない)内容を書いておきたいものです。これをコメント文と言います。
大規模なプログラミングなら、他のプログラマーが見てもわかるようにという配慮の場合もありますが、個人で作る場合、たいていは自分のためのメモ書きです。内容が複雑になると、いったいどんな処理をしているのか、後から見て自分でもわからなくなったりする。そんなときのためです。
秀丸エディタの場合、コメント文は冒頭にスラッシュを2つ付けます。行頭に//を付ければ1行全体がコメントになり、行の途中に//を書くと、それ以降の行末までがコメントになります。
今回の例では、
1行目……マクロ名とバージョン番号
2行目……作成日と最終更新日
3行目……マクロの簡単な説明
を書いてあります。最低限これくらい書いておくと、マクロの更新管理に便利だからです。
■マクロの書き方
一部を除き、秀丸マクロの各行は半角セミコロン(;)で終わります。言い方を変えると、秀丸はセミコロンまでを命令と見なして実行しようとします。
マクロのコマンド(文)は、頭から順番に実行されます。順序を変えるコマンドがある場合は、それに従います。
■コマンド(文)
コメントが終わって最初に出てくるのは、
gofiletop;
というコマンド。名前から想像できるとおり、「ファイルの先頭に移動してや」という
命令
です。
※秀丸のヘルプでは、コマンドを「文」とも読んでいます。
続く
beginclipboardread;
もコマンドで、「クリップボードからの読み取りを開始せいや」という命令。これがないと、次の行の getclipboard が動いてくれません。
getclipboard;
というコマンドで、実際にクリップボードの内容を読み取ります。
ただし、ここで重要なのは、
getclipboard は読み取るだけ
ということです。どういうことかというと、マクロの中で、この命令は確かに実行された。でも、クリップボードの内容はあくまでも内部的に読み取られただけで、それを
使える形で取り出す
という作業が必要です。
■変数と代入文
そこで、getclipboard の内容を プログラムで使える形にする必要があります。そのために使うのが、「変数」と「代入文」です。
$sr というのが変数ですが、頭にドル記号「$」が付いているので、これは文字列変数です。
$sr = getclipboard;
この式は「変数 $sr に getclipboard の内容を格納する」という意味になります。イコールを使ってはいますが、等式とは微妙に違います。
変数には、例外を除いて任意の英数字とアンダースコアを使えますが、あまり短いと自分でもわかりにくくなります。この例では、検索(Search)したい文字列を代入するので、Searchのうち最初の2文字を変数名にしました。
秀丸マクロの場合、変数の内容によって「文字列型変数」と「数値型変数」があります。
文字列型変数は、先頭にドル記号「$」を付けます。代入できるのは、「abc」とか「禿頭帽子屋」とか、そういう文字のまとまり。
数値型変数は、先頭にナンバー記号「#」を付けます。
ナンバー記号「#」とは、キーボードで「3」の上にあるやつです。「いげた」とか、英語だとpound signとも呼びます。シャープ記号「♯」とは違います。どのみち、プログラミングで使うのはいつも半角文字です。
「文字列型変数」と「数値型変数」を正しく使わないと、プログラムは動きません。この区別は、秀丸マクロに限らず、とても重要な考え方なので、ぜひ覚えておいてください。
■コマンド(文)、パラメータ付き
hilightfound 1;
もコマンドですが、「1」というパラメータが付いてます。これは強調表示をオンにするということ。パラメータを「0」にすると強調表示がオフになります。
このように、コマンドのなかにも gofiletop のように一律の動作を実行するものと、パラメータ指定によって異なる動作を実行するものがあります。
searchdown $sr;
これが最後のコマンド。パラメータは、さっき文字列を代入した文字列変数 $sr です。
つまり、このコマンドの意味は「文字列変数 $sr の内容を下方向に検索せいや」ということになります。
$sr には、getclipboard が代入されています。つまり、$sr の中身はこれ以前にコピーされている内容ということ。
これで、ごくシンプルながら、秀丸マクロをひとつ作り、その動きも1行ずつ理解できました。
後は、関数と制御文を使えるようになれば、かなりのことができるようになります。
■
「できるようになります」というのは、あくまでもスキル上の話です。プログラミングで大切なのは、プログラミングに至る発想とその実現の段階。
今回作ったマクロの例で言うと、こんな流れだったことになります。
検索って、翻訳中に何度も何度もやるから、少しでも楽をしたいなぁ。
↓
検索したい文字列って、入力することもあるけど、コピーすることも多いな。
↓
コピーした内容は、クリップボードに入ってるはず。
↓
クリップボードの内容を取り出して、それを検索すればいいんじゃね?
↓
ってことは、
1. クリップボードの内容を変数に入れて、
2. その変数をパラメータにして、
3. 検索コマンドを実行
すればいいんじゃないかな。
こういう発想に立って秀丸マクロを書いたことになります。ここで、大切なのは、赤字で書いた部分。こういう発想さえできれば、後はそれを実行できるコマンドを探していけばプログラムは書けます。
今回のように、ひとつでもマクロを書いてみて、その動きを1行ずつ納得できれば、最初の一歩はばっちりのはずです。
この記事へのコメントは終了しました。
コメント