Recommended
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
Chainer の Trainer 解説と NStepLSTM について
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
PDF
PDF
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PDF
PDF
実践多クラス分類 Kaggle Ottoから学んだこと
PDF
Deep learning for_extreme_multi-label_text_classification
PDF
PDF
PDF
PDF
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
PDF
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
PDF
PDF
PDF
PDF
知って得するC# LINQ to Objects編
PDF
PoisoningAttackSVM (ICMLreading2012)
PDF
PDF
PPTX
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
PPTX
PDF
PPTX
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
More Related Content
PDF
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
PDF
Chainer の Trainer 解説と NStepLSTM について
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PPT
Tokyo r#10 Rによるデータサイエンス 第五章:クラスター分析
PDF
PDF
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PDF
What's hot
PDF
実践多クラス分類 Kaggle Ottoから学んだこと
PDF
Deep learning for_extreme_multi-label_text_classification
PDF
PDF
PDF
PDF
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PDF
PDF
すべてのアクター プログラマーが知るべき 単一責務原則とは何か
PDF
PDF
PDF
PDF
知って得するC# LINQ to Objects編
PDF
PoisoningAttackSVM (ICMLreading2012)
PDF
PDF
PPTX
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
PPTX
PDF
Viewers also liked
PPTX
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
PDF
数学プログラムを Haskell で書くべき 6 の理由
PDF
マイクロサービス時代の生存戦略 with HashiCorp
PDF
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
PDF
実践Backbone.Marionette 現場の悩みと解決まで
PDF
PDF
FunScript:F#からJavaScriptへのコンパイラー
PDF
PDF
Developing IT infrastructures with Puppet
Similar to 【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
PDF
PDF
PDF
TypeScript & 関数型講座 第3回 関数型入門
PDF
ECMAScript6による関数型プログラミング
PDF
PDF
PDF
これからのJavaScriptー関数型プログラミングとECMAScript6
PDF
PPTX
PPTX
ODP
Javascriptで学ぶ Functional Programming
PDF
ちょっと詳しくJavaScript 第2回【関数と引数】
PDF
PDF
PPTX
PDF
PPTX
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PDF
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 5 章
PPTX
More from Narimichi Takamura
PDF
Nginx バージョンアップ動向(2014/01〜2014/12)
PDF
PDF
Dovecot & Postfix バージョンアップ動向 201506-201511
PDF
Dovecot & Postfix バージョンアップ動向 201401-201505
PDF
【続編】その ionice、ほんとに効いてますか?
PDF
( (0) / (0)) ☆祝☆ (nari_ex) LT at Cloud Server Festa 2013 Autumn「サバフェス!」
PPTX
PDF
Nginx バージョンアップ動向(2015/07〜2015/12)
PDF
Nginx バージョンアップ動向(2015/01〜2015/06)
PDF
Recently uploaded
PDF
歴史好きのスクラム話 JBUG名古屋#5 AI時代のデータドリブンなプロジェクト管理
PDF
論文紹介:Simultaneous Detection and Interaction Reasoning for Object-Centric Acti...
PDF
論文紹介:"MM-Tracker: Motion Mamba for UAV-platform Multiple Object Tracking", "M...
PDF
How We Operated Ticket-Driven Development in JIRA.pdf
PDF
論文紹介:"Reflexion: language agents with verbal reinforcement learning", "MA-LMM...
PDF
手軽に広範囲でプライバシーを守りながら人数カウントできる ~ LoRaWAN AI人流カウンター PF52 日本語カタログ
PDF
LoRaWAN小売業DXソリューション ~天候データと人流カウンターを利用して売り上げアップに貢献!
【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 アプリケーションを構築する一つの方法が「関数
型プログラミング」
• 抽象を導き出して関数として構築する
• すでに存在する関数を使って、より複雑な抽象を構築する
• すでに存在する関数を別の関数に渡すことによって、さら
に複雑な抽象を構築する