Recommended
PDF
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PDF
Chainer の Trainer 解説と NStepLSTM について
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PDF
PDF
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
知って得するC# LINQ to Objects編
PPTX
PDF
PDF
PDF
実践多クラス分類 Kaggle Ottoから学んだこと
PDF
PDF
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
PPTX
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
PDF
PDF
Deep learning for_extreme_multi-label_text_classification
PDF
PDF
PoisoningAttackSVM (ICMLreading2012)
PDF
PDF
PDF
PDF
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
PDF
Developing IT infrastructures with Puppet
More Related Content
PDF
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PDF
Chainer の Trainer 解説と NStepLSTM について
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PDF
What's hot
PDF
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
知って得するC# LINQ to Objects編
PPTX
PDF
PDF
PDF
実践多クラス分類 Kaggle Ottoから学んだこと
PDF
PDF
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
PPTX
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
PDF
PDF
Deep learning for_extreme_multi-label_text_classification
PDF
PDF
PoisoningAttackSVM (ICMLreading2012)
PDF
PDF
PDF
PDF
Viewers also liked
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
PDF
Developing IT infrastructures with Puppet
PDF
FunScript:F#からJavaScriptへのコンパイラー
PDF
PDF
マイクロサービス時代の生存戦略 with HashiCorp
PDF
実践Backbone.Marionette 現場の悩みと解決まで
PPTX
PDF
数学プログラムを Haskell で書くべき 6 の理由
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
PDF
Similar to 【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
PDF
PPTX
ODP
Javascriptで学ぶ Functional Programming
PPTX
PPTX
PDF
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
PDF
PPTX
PDF
TypeScript & 関数型講座 第3回 関数型入門
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
PDF
ECMAScript6による関数型プログラミング
PPTX
PDF
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PDF
PDF
PDF
PDF
More from Narimichi Takamura
PDF
Nginx バージョンアップ動向(2015/07〜2015/12)
PDF
Dovecot & Postfix バージョンアップ動向 201506-201511
PDF
Nginx バージョンアップ動向(2015/01〜2015/06)
PDF
Dovecot & Postfix バージョンアップ動向 201401-201505
PPTX
PDF
Nginx バージョンアップ動向(2014/01〜2014/12)
PDF
【続編】その ionice、ほんとに効いてますか?
PDF
PDF
PDF
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章 1. 2. 3. 4. 5. 6. apply メソッドを用いた例
function splat(fun) {
return function(array) {
// null を指定すると暗黙的にグローバルオブジェクトに変換される
return fun.apply(null, array);
};
}
var addArrayElements = splat(function(x, y) { return x + y });
addArrayElements([1, 2]);
//! 3
返り値として関数を返す関数
→ 関数型プログラミングの入り口!
7. arguments 変数
• すべての関数内で arguments ローカル変数にアクセス可能
• 関数呼び出し時に引数として与えられた値を保持
function func() {
for (var i = 0, l = arguments.length; i < l; i++) {
alert(arguments[i]);
}
};
func(1,2,3)
//! 1
//! 2
//! 3
8. 9. call メソッドと arguments 変数を用いた例
• 任意の引数を渡すことが可能
function unsplat(fun) {
return function() {
return fun.call(null, _.toArray(arguments));
};
}
var joinElements = unsplat(function(array) { return array.join(' ') });
joinElements(1, 2);
//! "1 2"
joinElements('-', '$', '/', '!', ':');
//! "- $ / ! :"
10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. function parseAge(age) {
if (!_.isString(age)) throw new Error('引数は文字列である必要があります');
var a;
console.log("age を数値に変換しようとしています");
a = parseInt(age, 10);
if (_.isNaN(a)) {
console.log(["age を数値に変換できませんでした : ", age].join(''));
a = 0;
}
return a;
}
24. 25. 26. 関数に抽象化
functon fail(thing) {
throw new Error(thing);
}
function warn(thing) {
console.log(["警告 : ", thing].join(''));
}
function note(thing) {
console.log(["情報 : ", thing].join(''));
}
27. サンプルコード 改
function parseAge(age) {
if (!_.isString(age)) fail('引数は文字列である必要があります'); ☆
var a;
note("age を数値に変換しようとしています"); ☆
a = parseInt(age, 10);
if (_.isNaN(a)) {
warn(["age を数値に変換できませんでした : ", age].join('')); ☆
a = 0;
}
return a;
}
28. 29. 30. 31. 32. 33. 例: sort()
辞書順なので数字の大小に関係なくソートされる
[2, 3, -6, 0, -108, 42].sort();
//! [-108, -6, 0, 2, 3, 42]
[0, -1, -2].sort();
//! [-1, -2, 0]
[2, -3, -1, -6, 0, -108, 42, 10].sort();
//! [-1, -108, -6, 0, 10, 2, 3, 42]
34. comparator 関数を用いた場合
function compareLessThanOrEqual(x,y) {
if (x < y) return -1;
if (x > y) return 1;
return 0;
}
[2, -3, -1, -6, 0, -108, 42, 10].sort(compareLessThanOrEqual);
//! [-108, -6, -3, -2, -1, 0, 10, 42]
if (compareLessThanOrEqual(1,1)) cosolelog("同じか小さい");
// なにも表示されない
35. プレディケート(predicate)
常に真偽値を返す関数
function lessOrEqual(x, y) {
return x<=y;
}
if (lessOrEqual(1,1)) consolelog("同じか小さい");
// 同じか小さい
[2, -3, -1, -6, 0, -108, 42, 10].sort(lessOrEqual);
//! [42, 10, 0, -1, -2, -3, -6, -108] ← 逆順になってる
36. 高階関数によるマッピング
関数を引数にとり、新しい関数を生成して返す関数
function comparator(pred) {
return function(x, y) {
if (truthy(pred(x, y)))
return -1;
else if (truthy(pred(y, x)))
return 1;
else
return 0;
};
[100,1,0,10,-1,-2,-1].sort(comparator(lessOrEqual));
//! [-2,-1,-1,0,1,10,100]
37. 38. 39. 40. 有用な関数その2: truthy()
与えられた値が true とみなされるかどうかを判定する
function truthy(x) { return (x !== false) && existy(x) };
truthy(false);
truthy(undefined);
//! false
truthy(0);
truthy('');
//! true
41. existy, truthy の応用
true なら実行、それ以外なら undefined を返す
function doWhen(cond, action) {
if (truthy(cond))
return action();
else
return undefined;
}
42. Array#map
配列のそれぞれの要素に対して引数に与えた関数を実行し、
それぞれの実行結果を格納した配列を返す
[null, undefined, 1, 2, false].map(existy);
//! [false, false, ture, true, true]
[null, undefined, 1, 2, false].map(truthy);
//! [false, false, ture, true, false]
43. 44. 45. 46. 1.3 Underscore について
• なんで使ったの
• いちいち map とか実装してる暇はない
• map の実装ではなく概念が説明したいんじゃ!
• Underscore は基本的なライブラリがきちんと ってる
• 車輪の再発明しても益少なかろうよ
→ Topotal 1系...
47. 1.4 まとめ
• 入門的なトピックを扱った
• JavaScript アプリケーションを構築する一つの方法が「関数
型プログラミング」
• 抽象を導き出して関数として構築する
• すでに存在する関数を使って、より複雑な抽象を構築する
• すでに存在する関数を別の関数に渡すことによって、さら
に複雑な抽象を構築する