linq.jsとTypeScript
ちょっと調査したいことがあってlinq.jsを使ったんですが
間抜けなことで嵌ったので自戒を込めて書いておきます。
正しく動くコード
$(function () { $('#button').bind('click', function () { Enumerable.range(1, 30) .select(function (x) { return x.toString() }) .where(function (x) { return x.indexOf("3") !== -1 }) .forEach(function (x) { $('#result').html($('#result').html() + " " + x) }); }); })
まあ3を含んだ数字を出力するというどうでもいいプログラムです。
(知りたかったことはC#同様に1つずつ列挙操作が行われるのかなんですけどね)
linq.jsは、VisualStudio上だとコード保管も聞くので非常に気持ち良く記述することが出来ます。
でも気持ちよすぎてついやっちゃうんですよ
$(function () { $('#button').bind('click', function () { Enumerable.range(1, 30) .select(function (x) { x.toString() }) .where(function (x) { x.indexOf("3") !== -1 }) .forEach(function (x) { $('#result').html($('#result').html() + " " + x) }); }); })
returnが無い・・・
functionは忘れなかったんですけどねw
そして構文上はエラーでは無いのでVSは怒ってくれない。
whereの中のindexOfが実行時エラーになるのですが、しばし悩みましたね。 はい。
やっぱLINQには、ラムダ式が必要だ~っと思ったら神の声がw
「TypeScriptを使いなさい」
そういえばそんな手がw
module Sample { export class Counter { static count() { Enumerable.range(1, 30) .select( x => x.toString() ) .where( x => x.indexOf("3") !== -1 ) .forEach( x => $('#result').html($('#result').html() + " " + x) ); } } }
これは気持ち良すぎるね
まだPreviewだけど使っちゃおうかな~