JavaScriptと
Collection
Introduction
 狩野 和博
 Gentoo
 Emacs
 Ruby, TypeScript, Haskell, C#
 Firefox OS, Tizen OS, Windows Phone OS
 ガジェット, カメラ
Collection
今日のテーマ
Collection
 コレクション処理を聞いたことがある人
 RubyのEnumerableクラスを聞いたことがある人
 Pythonのiterateを引数にとる関数を見たことがある人
 JavaScriptのunderscore.jsを聞いたことがある人
 PHPでarray_*関数を隅から隅まで見たことがある人
関数群
 Array.filter, Array.map, Array.each
 filter, map, each
 array_filter, array_map, forEach
配列処理
linq.js
今日のお題その1
linq.js
 linq.js - LINQ for JavaScript http://linqjs.codeplex.com/
 LINQのJavaScript実装
 日本人の @neue さん作
統合言語クエリ(LINQ)
.NET Framework 3.5において様々な種類のデータ集合に
対して標準化された方法でデータを問い合わせることを
可能にする、言語に統合された機能のことである。
Functions
 Enumerableオブジェクト生成
 From, Range
 フィルタリング
 Select, Where, Scan, SelectMany, Zip
 順序
 OrderBy, OrderByDescending,
 コンバート
 ToArray, ToObject, ToString
 集計
 Count, Max, Min, Sum
Example
配列内の偶数だけ2倍して出力
Example
配列の偶数だけ取り出して、2倍して出力
Example
JavaScript
var array = [101, 20, 2, 42, 33, 47, 52];
array.forEach(function(x, i) {
if (x % 2 == 0) {
var v = x * 2;
console.log(v);
}
});
Example
linq.js
var array = [101, 20, 2, 42, 33, 47, 52];
Enumerable.From(array)
.Where(function(x){ return x % 2 == 0 })
.Select(function(x){ return x * 2 })
.ForEach(function(x){ console.log(x) });
Example 2
配列の要素の2乗和を求めていき、最初に2000を超えた要素
を求める
Example 2
配列の2乗和を求めていき、2000を超えた最初の要素を出力
Example 2
JavaScript
var x = 2, t = 0,
twice = [1], temp = [1];
while(true) {
var v = x * x, t = v;
for(var i = 0; i < twice.length; i++) {
t += twice[i];
}
twice.push(v);
temp.push(t);
if (t > 2000) { break; }
x++;
}
Example 2
linq.js
// 1から無限大まで数値をジェネレート [1, 2, 3, 4,...]
var result = Enumerable.ToInfinity(1)
.Select("$*$") // 二乗 [1, 4, 9, 16,...]
.Scan("$+$$") // 和 [1,5,14,30,...]
.First("$>2000"); // 2000を超えた最初の要素
Advantage
 Enumerableオブジェクトを返すまで評価が遅延される
 無限配列を扱える
 jQueryの世界とも連携できる
 jQueryとlinqは共存
RxJS
今日のお題その2
RxJS
 The Reactive Extensions for JavaScript
 (Functional) Reactive Programminng のライブラリ
 Microsoftから公式に提供されているライブラリ
 C#3.0で導入されたライブラリ
 そのJavaScript版
 イベントをコレクションとして扱える
The Reactive Extensions (Rx) is a library for composing
asynchronous and event-based programs using observable
sequences and LINQ-style query operators.
Reactive
Programming
var a = 1;
var b = a + 1;
a = 5;
b = ???
Example
Appendex
 linq.js & Reactive Extensions for JavaScript(RxJS)入門
 http://neue.cc/2010/12/20_290.html
 やさしいFunctional reactive programming(概要編)
 http://maoe.hatenadiary.jp/entry/20100109/1263059731
 linq.js Reference
 http://neue.cc/reference.htm

JavaScriptとCollection