読了: 約 1 分

ftl(http://freemarker.org/)を使用していると頻出するのがlocalとassign。
どちらもローカル変数なのですが、使い方を間違えると意図しない動きになるのでメモしておきます。

下記が何故trueになるのか、、というところで悩む方がいるかもしれませんが、

<#local x = true>
<#local y = false>
<#local z = 0>
<#if z = 0>
<#assign x = false>
</#if>
${x} // true

<#if>や<#list>の中でローカル変数を定義すると、その中でしかその値は使えず、
ループや条件分岐を抜けた場合は外側のlocal変数に定義されているtrueが有効になるという当たり前のシンプルな答えでした。

<#assign x = true>
<#if z == 0>
<#assign x = false>
</#if>

の場合は、有効になるので注意が必要です。

参考記事

http://www.hos.co.jp/blog/20100712/