[ 編集このページを編集する ]

トップ > MAP作成 > トリガーエディタ > Jass Script > Jass講座 > TextMacro



Jass NewGenの機能。単純なコードの繰り返しなどを省くことができる機能。コードをすっきり見せるのに便利。MAP保存時に、通常の形にコンパイルされる。



定義

テキストマクロは、指定した範囲のコードの変数部分を置換したものを、繰り返し記入する際用いられる。

  • 範囲の指定
        //! textmacro マクロ名 takes 変数名1,変数名2,...
              〜$変数名1$〜
              〜$変数名2$〜
        //! endtextmacro

範囲内には、変換させたい変数を $変数名$ の形で書いたコードを記入する。次に、変数の値を指定してこれの複製を行う。

  • 範囲の複製
        //! runtextmacro sample("変数1の値","変数1の値")

変数の値は、ダブルクォーテーション(")で挟む。これで、指定した範囲内のものの、それぞれの 変数名 が置換された文章が出力される。

範囲は何行あってもかまわないし、librarystruct 等を含めてもかまわない。

また、同じマクロ名をもつテキストマクロは宣言できないが、一度宣言されたテキストマクロは、コードのどの位置にも(たとえ上流であっても)挿入できる。

使い方のサンプル

以下のようなコードがあるとする。

  • テキストマクロなし
        function test takes integer t returns nothing
            local integer i1 = t * 1
            local integer i2 = t * 2
            local integer i3 = t * 3
            local integer i4 = t * 4
            local integer i5 = t * 5
            local integer i6 = t * 6
            local integer i7 = t * 7

これを、テキストマクロを使って書くと

  • テキストマクロあり
        function test takes integer t returns nothing
            //! textmacro sample takes n
                local integer i$n$ = t * $n$
            //! endtextmacro
            //! runtextmacro sample("1")
            //! runtextmacro sample("2")
            //! runtextmacro sample("3")
            //! runtextmacro sample("4")
            //! runtextmacro sample("5")
            //! runtextmacro sample("6")
            //! runtextmacro sample("7")

このようになる。この例ではいまいちありがたみを感じないが、以下のような利点がある。

  • もとの文章を改変したいとき、訂正が一箇所ですむ
  • 複製範囲が複数行にわたるとき、コードが見やすくなる

注意点

複数のテキストマクロを、ネストすることはできない。

  • エラーが出る例
            //! textmacro sample1 takes n1
                //! textmacro sample2 takes n2
                    set $n1$ = $n2$
                //! endtextmacro
            //! endtextmacro