AREA 021
Featuring AlphaScript

STEP 13 マクロ

 

一度作ったスクリプトを後から修正したいときに威力を発揮するのがマクロです。  役割は単純明快ですが、覚えておいて損はない便利な機能です。  他のプログラミング言語にも必ずと言っていいほど似たような機能があり、多くのソースコードで利用されています。(と思います。)  あと、マクロという呼び名が適切なのかはわかりませんが、他の呼び名が思いつかなかったので、ひとまずこう呼ばせていただきます^^;

マクロを作りたいときは、行の先頭に # を書いた後に 「"」(ダブルクオーテーション)で囲ったふたつの文字列を書きます。  これは必ず1行で書き、終わりに「;」を置く必要はありません。 (ちなみにこれは C言語 と似た記述方式です)

これで、それ以降スクリプト本文の中で1番目の文字列と同じものが見つかると、2番目の文字列に置き換えてくれます。  このように置き換える文字列を宣言することを「マクロを定義(ていぎ)する」とか言います。(「じょうぎ」ではありません。)  また、文字列の変換は実行時に行われますので、置き換えた後のスクリプトでエラーチェックをします。  どの部分が置き換わるのか確かめたいときは、エディタの文字列検索機能を使えば簡単です。

同じ意味を持つ数値をスクリプト内で複数回記述する場合はもちろん、 1箇所にしか記述しない場合でも、直接的な数値ではなく、言葉であったほうがわかりやすいです。  (例えば、"365" と "YEAR" なら、後者のほうがわかりやすいですよね?  また、365が何を意味する数値なのか後でわからなくなる、なんてことも避けられます)


固定の数値を使いまわしたいだけなら、変数に代入してそれをあちこちから参照する方法もあります。  しかし、これだといちいち変数の内容にアクセスするので、若干効率が悪いです。 (その数値が登場するたびにプログラムが箱の中身を見なければならないので)  やはり、マクロは積極的に使う価値がありそうです。

ただ、変数名などと区別するため、置き換え前の文字列は、何かそれとわかるものにしておくのがベターです。  一般的なのは、 "OKIKAERU_MOJIRETSU" のようにすべて大文字で書くことですが、 人に見せるものでなければ好きなやり方で構わないと思います。(先頭に何か決まった文字を置くなど)


マクロいろいろ

さらに、もっと高度な使い方もあります。  これも含め、正確な「マクロ」の定義を以下に示します。

 #  "ABC"  "XYZ"  // 1 
 #  "ABC?abc?ABC"  "XYZ?abc?XYZ"  // 2 
 #  "ABC?abc?ABC?def?ABC"  "XYZ?abc?XYZ?def?XYZ"  // 3 
 #  "ABC?abc?ABC"  "ABC?abc?ABC?abc?ABC"  // 4 
 #  "ABC?abc?ABC?abc?END"  "XYZ?abc?XYZ?abc?END"  // 5 


1

"ABC" を "XYZ" に置き換えます。

2

"ABC(間にある文字列)ABC" に当てはまる部分を、 "XYZ(間にあった文字列)XYZ" に置き換えます。

3

"ABC(間にある文字列1)ABC(間にある文字列2)ABC" に当てはまる部分を、 "XYZ(間にあった文字列1)XYZ(間にあった文字列2)XYZ" に置き換えます。

4

"ABC(間にある文字列)ABC" に当てはまる部分を、 "XYZ(間にあった文字列)XYZ(間にあった文字列)XYZ" に置き換えます。

5

"ABC(1番目の間にある文字列)ABC(2番目の間にある文字列)END" に当てはまる部分を、 "XYZ(1番目の間にあった文字列)XYZ(2番目の間にあった文字列)END" に置き換えます。

また、置き換え後の文字列を書かないことにより、そのマクロを解除できます。  特定の場所だけで置き換えをしたいときは、これを利用してください。

// ABC を置き換えない
 #  "ABC"  "XYZ"
// ABC を置き換える部分
 #  "ABC"
// ABC を置き換えない

さらに、置き換え前の文字列も書かなければ、その行で全てのマクロを解除できます。 

// ここで全てのマクロを解除
 #

当然ですが、文字列を置き換えるためには、内部で置き換える前の文字列を探す処理が発生しますので、 マクロがあってもなくても良い場合は、なるべく解除しておくことをオススメします。


その他の注意事項

すでに定義されている文字列が指定された場合、置き換え後の文字列を更新します。  途中でマクロの意味を変えたい時は、わざわざ解除しなくても普通に書けばOKです。

置き換えられた後の文字列の中に、さらに定義されている文字列があっても、置き換えは行いません。 

マクロ宣言の行では、" " で囲まれている中身以外は無視されますので、文字列の前後にコメントを付けることもできます。  また、実行時にはマクロ登録よりもコメントの除去のほうが先に行われますが、 マクロ宣言の行内に含まれるコメントの開閉( /* と */ )は認識しません。

' ' で囲まれた文字列中でもマクロの置き換えは有効ですが、 場合によっては置き換えてほしくないこともあるかもしれません。  この場合は、文字列を分割して連結するなどで対処してください。

 

ページ一覧に戻る  次のステップへ!

Copyright (c) Rabit 2005-2012 all rights reserved.