FreeMarker Template Language 入門(3)
パッケージJava製品開発担当の大です。こんにちは。
前回に引き続き、FreeMarker Template Language(以下 FTL)の紹介をします。
今回は、FTLの「式」について書きます。
式を使用する場所
前回、インターポレーションの説明のところで式が出てきました。
${3 + 4} ${"hogehoge"?upper_case}
FTLタグのディレクティブにも、パラメータとして式を指定するものがあります。たとえば、「if
」ディレクティブなどです。
こんにちは、${user}さん! <#if numComments != 0> 新着コメントが${numComments}件あります! </#if>
パラメータはディレクティブによってさまざまなので、適宜リファレンスを参照しましょう。
式の種類
では、式の種類について簡単に見ていきましょう。
リテラル
値を直接指定します。LL言語っぽい配列やハッシュのリテラル記法もあります。
文字列 | "hogehoge" または 'fugafuga' のように、ダブルクオートもしくはシングルクオートで囲みます。 |
---|---|
数値 | 12 や 123.45 のように書きます。指数表記(10E8 のような)はいまのところサポートされていません。 |
真偽値 | true または false です。 |
配列(シーケンス) | ["ローヌ", "ブルゴーニュ", "ボルドー"] のように、値(subvariables)をカンマで区切って指定します。 |
ハッシュ | {"name":"肉まん", "price":100} のように、キーと値のペアを並べて記述します。キーは文字列である必要があります。JSONみたいですね。 |
演算
1つ以上のオペランドと演算子からなる式です。
算術演算 | 3 + 4 のような計算式です。 + 、- 、* 、/ 、% (剰余)の5種類が使用できます。 |
---|---|
比較演算 | 上記の例の「if 」ディレクティブで指定した numComments != 0 のように、二つの値を比較する式です。< 、<= 、> 、>= 、== 、!= が使用できます。== は = と書くこともできます。 |
論理演算 | || (論理和)、&& (論理積)、! (否定)の3種類が使用できます。 |
文字列演算 | 文字列リテラル中では、"こんにちは、${user}さん!" のように、インターポレーションが使用できます。また、"こんにちは" + user + "さん!" のように + を使用して連結することもできます。 |
配列演算 | ["ひつまぶし", "きしめん"] + ["味噌かつ", "味噌煮込み"] のように、配列の連結も + で出来ます。 |
ハッシュ演算 | 同様に、ハッシュも {"数学":80, "物理":65} + {"国語":25, "英語":12} のように、+ で連結できます。 |
ビルトイン
型ごとに、さまざまな組み込みの手続きが用意されています。ビルトインは、オペランドの後ろに?
に続けて指定します。 以下の例はそれぞれ、文字列・数値・配列のビルトインの例です。
${"spring"?cap_first} ${12.4?int} ${['鳩', 'チキン', 'サギ']?size}
用意されているビルトインの一覧はこちらにあります。
変数
トップレベルの変数は、前述の例の ${user}
のように単純に変数名で指定します。
変数名に使える文字は、アルファベット、数字、_
(アンダーライン)、$
(ドル記号)、@
(アットマーク)、#
(シャープ)等のほか、非ラテン文字も使用可能です。ただし、変数名は数字から始めることはできません。
前回の例の ${food.name}
のように、JavaBeansのプロパティへのアクセスやハッシュの要素へのアクセスでは、.
(ドット)に続けてプロパティ名/要素名を指定します。
あるいは、${food["name"]}
のように書くこともできます。どちらも同じ意味です。
配列(シーケンス)の要素へのアクセスの場合は、Javaと同様に、hoge[0]
と添字を指定します。
メソッド呼び出し
JavaBeansのメソッドはJavaでの記述と同じように呼び出すことが可能です。
トップレベルに登録したメソッドを呼び出す場合、 ${methodName(arg)}
のように呼び出すことができます。メソッドの登録・呼び出しについては、また改めて詳しく書こうと思います。