読者です 読者をやめる 読者になる 読者になる

けさらんぱさらん

方向性は定めず、ただ思いつくままに

linq.jsとTypeScript

Javascript TypeScript LINQ

ちょっと調査したいことがあって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だけど使っちゃおうかな~