16
linq.js Linq to Objects for JavaScript @neuecc - 2011/08/20

linq.js - Linq to Objects for JavaScript

Embed Size (px)

DESCRIPTION

LT - linq.jshttp://linqjs.codeplex.com/

Citation preview

Page 1: linq.js - Linq to Objects for JavaScript

linq.js

Linq to Objects for JavaScript

@neuecc - 2011/08/20

Page 2: linq.js - Linq to Objects for JavaScript

Twitter : @neuecc

HN : neuecc ("のいえ"と読ませています)

Microsoft MVP for C# LINQ

Blog : http://neue.cc/

LINQとかReactive Extensions(Rx)のことがメイン

CodePlexに色々ライブラリ公開しています

単体テスト用拡張メソッド : Chaining Assertion

dynamicを活用したJSONライブラリ : DynamicJson

生SQL文ベースのDB用ヘルパー : DbExecutor

Profile

Page 3: linq.js - Linq to Objects for JavaScript

linq.js

Page 4: linq.js - Linq to Objects for JavaScript

LINQ to Objects

for JavaScript

Page 5: linq.js - Linq to Objects for JavaScript

Query Syntax

Method Syntax

Page 6: linq.js - Linq to Objects for JavaScript

C# Enumerable.Range(1, 10) .Where(x => x % 2 == 0) .Select(x => x * x) .ToArray();

JavaScript(linq.js) Enumerable.Range(1, 10) .Where(function (x) { return x % 2 == 0 }) .Select(function (x) { return x * x }) .ToArray();

Page 7: linq.js - Linq to Objects for JavaScript

完全に一致 JSなのにメソッドをUpperCamelCaseにしてまで一致させたのは後悔してますが……

Page 8: linq.js - Linq to Objects for JavaScript

メソッド構文、すなわち

jQueryなどでお馴染みの

メソッドチェーンは

JavaScriptのLanguageとして

INtegratedされているので

VSで書けばIntelliSenseが効いてQueryが書きやすい

Page 9: linq.js - Linq to Objects for JavaScript

jQueryあるし……?

Page 10: linq.js - Linq to Objects for JavaScript

役割が違う

jQueryはDOM操作

linq.jsはコレクション操作

RIAが叫ばれる昨今では、クライアントサイドでの処理も少なくない。データ処理が重要だが、素の状態のJavaScriptはコレクション操作があまりにも貧弱(forループしかない!←ES5からfilter,map,reduce,every,some,forEachは入りました)

・冗長なDOM操作APIの苦痛を和らげるjQuery

・貧弱なコレクション処理を補完するlinq.js

互いに競合しない、むしろ協調動作する

Page 11: linq.js - Linq to Objects for JavaScript

標準クエリ演算子の全てが使用可能

JoinだってDistinctだってThenByだって何でもある

挙動も完全再現してます(頑張った!)

当然、遅延評価だよ?

更に大量の謎拡張メソッドも

ForEachとかCascadeDepthFirstとか

UnfoldとかScanとかTakeExceptLastとか

現在のところ全90メソッド

DOM依存がないのでNode.jsやWSHでも動く

WSH/JScriptの腐ったEnumeratorも殺害可能

Features #1

Page 12: linq.js - Linq to Objects for JavaScript

jQueryプラグイン/拡張バインディング

JavaScriptといったらDOM、DOMといったjQuery

TojQueryとtoEnumerableでシームレスに連携

簡易ラムダ記法

.Where(function(x){ return x % 2 == 0 })

長くてダルい

.Where("x => x % 2 == 0")

C#風のラムダ式を文字列渡しすることが可能、短い!

.Where("$ % 2 == 0")

デフォルトイテレータ変数で更に短く書ける

Features #2

Page 13: linq.js - Linq to Objects for JavaScript

IntelliSense完全サポート

vs-docもちゃんと完備してます

Features #3

Page 14: linq.js - Linq to Objects for JavaScript

Reactive Extensions for JavaScript(RxJS)との接続

JavaScriptはEnumerableとObservableが両方そなわり最強に見える

まあ、C#のほうがいいですけどね:)

LINQ to Everything, LINQ over the Language

RxJSはすっかり更新されてなくてアレゲだけど

更新待ってます

linq.jsも最後の更新が半年ぐらい前なのですけど

やるべきことは沢山たまっているのでやらないと……

Features #4

Page 15: linq.js - Linq to Objects for JavaScript

Linq for Javascript + JQUERY == BLISS!

It's a totally bloody loop-buster!!!

A real time saver for JS intensive apps.

Can't even imagine writing JavaScript without this

library, linq.js together with jQuery makes life lot

easier;)

This library is an absolute requirement when doing

any JS coding - webpages, mongodb, node.js etc.

I've been using it for months and I can't live

without it.

利用者の声

Page 16: linq.js - Linq to Objects for JavaScript

詳しくは@ITに記事を書いたので見てね

JavaScriptで配列をLINQにより処理できるライブラリ「linq.js」を利用するには?

jQueryと「linq.js」を連携させてDOMをLINQにより処理するには?

ダウンロードはCodePlexから

http://linqjs.codeplex.com/

NuGetからも入れられます

linq.js, linq.js-jQuery, linq.js-Binding

まとめ