Diary?

2008-04-04
Fri

(21:55)

FreeMarker で次のようなテンプレートを書いて実行したら、「文字列か日付か数値入れろっつってんだろ、真偽値を入れるなクソめ」と FreeMarker 様に盛大に怒られた。

/* まずはデータをセットしてるところ。*/
ctx = createContext(); // Map interface を実装してるものが返される
ctx.put("foobar", "Foo!!!"); // 文字列入れてるよな俺?
//以下、 ctx に値をセットしてビューに渡す処理が続く
 
/* FreeMarker テンプレート */
<#if ctx?has_content>
${ctx.foobar} <- ここで FreeMarker 様がブチ切れるわけですよ
</#if>

それで調べてみたらテメー、 createContext で返されるクラスを調べてみたら foobar ってメンバ変数が定義されているじゃねえか。つまりあれか、メンバ変数が定義されてたら public でなくともそっちが優先される……のか? ってか俺だったら createContext で返されるクラスにメンバ変数と同名のキーを put 出来ないような処理を入れるだろうな。

そしてこういう事例をみると静的型付けだから何って気分になる。動的言語と同様に実行するまで型の不整合がわからなくなるのと引き換えに、確かに柔軟性は得られるしそれに旨味がないといえば嘘になるけど、全体を見渡したときの断絶・不統一性がムカついて仕方がない。だったら最初から動的言語で書かせてくれよ、それだったら最初からそういうもんだと思って書くんだから。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。