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年生