FreeMarker Template Language 入門(4)
パッケージJava製品開発担当の大です。こんにちは。
前回に引き続き、FreeMarker Template Language(以下 FTL)のお話です。
今回は、FreeMarkerで用意されているFTLタグのディレクティブのうち、制御構造に関するものを紹介しようと思います。
条件分岐
条件分岐は、if
ディレクティブまたはswitch
ディレクティブを使用して行います。
if
ディレクティブについては、前回もちょっと出てきましたね。他の言語と同様、else
やelseif
を追加することも可能です。
1 2 3 4 5 6 7 | <# if nationality != "日本" > 日本国籍が必要です。 <# elseif age < 20> 未成年者は投票できません。 <# else > 矢印に沿ってお進みください。 </# if > |
switch
ディレクティブも、他の言語にあるものとほとんど変わりません。比較するのが数値に限らず、文字列などでもオッケーなのがうれしいですね。(Javaも次のバージョンで出来るようになるみたいですが。。)
1 2 3 4 5 6 7 8 9 10 | <# switch dept> <# case "外科" > 診察室は1番です。 <# break > <# case "内科" > 診察室は2番です。 <# break > <# default > しばらくお待ちください。 </# switch > |
繰り返し
繰り返しはlist
ディレクティブを使用して行います。
list
ディレクティブは、この連載の第2回で出てきましたね。パラメータとして渡されたコレクションの要素数ぶん、ループします。
1 2 3 4 5 | <#assign items=[ "金" , "銀" , "パール" ]> <#list items as x> ${x} プレゼント♪ </#list> |
この例の場合、
金 プレゼント♪ 銀 プレゼント♪ パール プレゼント♪ |
と、表示されます。
list
ディレクティブの中では、暗黙的にふたつの特殊な変数が用意されます。ひとつめは、「パラメータで指定した変数名 + _index
」という名前で定義される、ループのインデックスです。
1 2 3 | <#list items as x> ${x_index}: ${x} プレゼント♪ </#list> |
この場合、
0: 金 プレゼント♪ 1: 銀 プレゼント♪ 2: パール プレゼント♪ |
と、表示されます。勝手に変数名を作られるのは少々気持ち悪いですが、実用上は便利です。
ふたつめは、「パラメータで指定した変数名 + _has_next
」という名前で定義される、ループの最後かどうかを返すフラグです。
1 2 | <#list items as x>${x}<# if x_has_next>、</# if ></#list> プレゼント♪ |
この例は、
金、銀、パール プレゼント♪ |
と、表示されます。
ところで、前回シーケンスのリテラルのところで書いてなかったのですが、数値のシーケンスは「0..10
」のように範囲を指定したリテラル表記も可能です。これもLLっぽくていいですね。
これを使うと、他の言語のfor文ぽいものも書けます。
1 2 3 | <#list 1..3 as i> ${i}年生 </#list> |
1年生 2年生 3年生 |