Groovyとヒアドキュメント

ヒアドキュメントのある言語は美しい。
まぁ理由はいくつかあるが、一番自分が気に入っている部分はこういうところだ。
例えばJavaScriptだとこんな感じのスクリプト


function makeSql(condition){
var strSql = "";
strSql = "select";
strSql = "tname";
strSql = "from";
strSql = "tab";
strSql = "where";
strSql = "tname = " + condition ;
// なんとかして上記の動的に条件生成したselect文をファイルに保存
save_file(fileName); // めんどいから書かない。FileSystemObjectとかでやるんだろう。
return fileName;
}

function sqlplus(){
var sh = WScript.CreateObject("WScript.Shell");
sh.Run("sqlplus scott/tiger@ora_hogep @" + makeSql("aaaaa"));
}
// 実行
sqlplus();

とか、こんな感じのサンプルがあったとする(極端な例だけど実際にこういうの業務で使ってる人は多いんじゃないかな?)
JScriptでこういうのを書くと便利なんだけど、makeSqlの部分が邪魔だ。
JScriptだと改行もできないから、(行末にセミコロンがなくても勝手にステートメントと判断される)
長いステートメントを書こうとするととても困ることになる。
こういうときにヒアドキュメントがある言語だととても嬉しい
以下はGroovyの例

def makeSql(condition){
strC = <<
なぜ、こちらの方が優れている、と感じるか?
それは人それぞれな部分もあるだろうがe_c_e_tとしては以下の点を押したい
いちいちダブルクォートで囲まなくて良い
エディタで書くときに見やすい
(ダブルクォートで囲むだけで色が変わるとこのようなメタプログラミングのときに見づらい)
したがって改行関係のミスと無縁になる
と、思うんだが。どうだろう。


ちなみにGroovyのヒアドキュメントで

strC = <<< EOF // <<<とEOFの間にスペースがある!
とか書いてしまうとそこでスクリプトが終わってしまうらしいので気をつけよう。
しばらく気がつかなくて、焦ったよ。