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