Home > 2016
2016
新しいテンプレート表現「ラムダ式」
昨年(2015年)5・6 月に、Blogger テンプレートに新しい表現方法が相次いで登場したのを覚えているでしょうか。
Blogger テンプレート上で扱える構文が増えて、随分柔軟になった印象を受けたものですが、今回、さらにラムダ式が使えるようになりました。次のリンクが Blogger 公式のアナウンスです。
「ラムダ式とはなんぞや?」という人は、このサイトの説明がわかりやすいかと。
// 匿名メソッド
Calculate(1, 2, delegate(int x, int y) { return x + y; }); // 出力:3
// ラムダ式
Calculate(1, 2, (x, y) => x + y); // 出力:3
Calculate(1, 2, delegate(int x, int y) { return x + y; }); // 出力:3
// ラムダ式
Calculate(1, 2, (x, y) => x + y); // 出力:3
無名関数の定義と呼び出しが簡単に記述できる式というと…伝わるでしょうか。Blogger テンプレート上に記述する実際の例として挙げられているのが次のコードです。
<b:if cond='data:post.labels any (l => l.name == "Flower")'>
<img src=’/img/flower.jpg’ />
<b:if/>
<img src=’/img/flower.jpg’ />
<b:if/>
その投稿に「Flower」ラベルがついていれば、花の画像を表示するというコードです。これまで b:loop タグを使わないと書けなかったものが、確かに随分簡単になっていますね。
Blogger で使えるラムダ式の仕様
Blogger で実際に使えるラムダ式ってどんなもの?と思って調べてみると、ヘルプフォーラムで解説を発見。
例えば
data:posts count (p => p.numComments > 0)
というコードは、少なくとも 1 コメントついている投稿の数を示すためのもの。
細かく見ていくと、赤字部分は対象となるデータ(アイテムセット:今回は投稿情報)を、青字部分は行う処理の種類(ラムダオペレータ:今回はその数)を、緑部分は実際のチェック内容(ラムダエクスプレッション:今回はコメントの数 0 より多いかどうか)を指定しています。
ラムダエクスプレッションは、さらに
=>
前後で分けられて、左辺に変数名(今回は data:posts
セット内の各アイテム post
を p
と名付けている)を、右辺にその変数を使った表現を記述することになっています。うーん、使い慣れると便利なのかもしれませんが、使い方をマスターするのになかなか時間がかかりそうですね。ちなみに、ラムダオペレータに使えるキーワードは次の通り。
any | ... ラムダエクスプレッションを満たすアイテムがセット内に 1 つでもあれば true を返す。 |
---|---|
all | ... セット内のアイテムすべてがラムダエクスプレッションを満たせば true を返す。 |
none | ... ラムダエクスプレッションを満たすアイテムがセット内に 1 つもなければ true を返す。 |
count | ... セット内でラムダエクスプレッションを満たすアイテムの個数を返す。 |
filter | ... セット内でラムダエクスプレッションを満たすアイテムだけを集めたセットを返す。 |
map | ... ラムダエクスプレッションで記述された結果を集めたセットを返す。 |
first | ... セット内でラムダエクスプレッションを満たす最初のアイテムを返す。 |
filter や map が自在に使えるようになれば、Blogger テンプレートでもかなり複雑な指示が出せそうですね。われこそは!と思う人は、ぜひチャレンジしてみてください。