SlideShare a Scribd company logo
Y=f=>(x=>f(x(x)))(x=>f(x(x)))
MozillaJapanテクニカルマーケティング
清水智公(nshimizu@mozilla-japan.org/@chikoski)
html5jWebプラットフォーム部第12回勉強会Satisfunction(){...};
Firefox for iOS
FirefoxをiPhone、iPad、
そしてiPod touchでも
N.Shimizu
• Mozilla Japan: L10N / dev-rel in devtools and games
• html5j Web プラットフォーム部、

Firefox OS、Firefox OS コードリーディング、

html5j ゲーム部
• @chikoski
• プログラミング言語、圏論、分類、ベイジアン、サッカー
データと操作
数学的な関数:変数に依存して決まる値、もしくはその対応関係のこと
20160428 html5jwebplat
20160428 html5jwebplat
得点 得点率
100点
満点
合格点
以上?
採点
20160428 html5jwebplat
20160428 html5jwebplat
関数型言語の代表的特徴 JavaScript
第一級関数 ◯
参照透過性 ×(破壊的な操作が可能)
単一代入 △(constを利用すれば実現可能)
型による制約 ×(duck typing)
遅延評価 ×(常に正格な評価を行う)
直和型 ×
関数定義
function 文:名前付きの関数を定義する文
function 式:無名関数を定義する式
よく見る無名関数の利用例
よく見る無名関数の利用例
式: 評価すると値になるもの
式の例
代入をすることによって値に名前をつける
無名関数の定義も式
関数を変数に代入できる
関数の変数への代入、代入された関数の参照
関数の呼び出し
関数の呼び出し
関数を引数にとる関数
配列の値の合計を求める関数
配列の値の2乗和を求める関数
配列の値の3乗和を求める関数


配列の各要素に関数 f を適用した結果の総和を求める関数
関数を切り替えることで振る舞いを変更する
よく見る関数を引数とする関数の呼び出し
リスト処理
filter:フィルタする判断をパラメータ化


sort:順序の判定方法をパラメータ化


map / reduce:写像方法と左畳み込みの方法をパラメータ化
every / some:条件の判定をパラメータ化
forEach:繰り返す手続きをパラメータ化
関数を返す関数
関数を返り値とする関数を定義できる
引数の片方を固定することで、特殊な関数を定義できる
関数を返す関数の利用例: 関数の一部分を固定し、特殊な関数を作成する
関数を返す関数を利用して、「同じようなことをする」関数を生成できる
関数を引数とし、関数を返す関数
関数を切り替えることで振る舞いを変更する
リストの総和を求める関数を返す関数 sigma
合計、二乗和、三乗和を求める関数の定義と利用
参照透過性
純粋な関数:同じ入力であれば、常に同じ値が出力される
20160428 html5jwebplat
参照透過性のある関数
参照透過性のない関数:呼び出すたびに返り値の値が異なる
破壊的な操作 / 副作用:状態を変更する操作




クロージャを利用して、状態のスナップショットを取る
参照透過なカウンターの利用例
オブジェクト指向で実装したカウンタの利用例
カリー化
足し算を行う関数
関数を返すように書き換える
関数を返す関数
書き換えた add の使用例
カリー化:複数の引数をとる関数を1つの引数をとる関数にかえること
カリー化を利用した条件分岐の実現
自然数の関数表現
Yコンビネータ
再代入:同じ変数に対する代入
x に基づく仕事をしていいのか?
const:ローカルな定数の作成
const:ローカルな定数の作成
コールスタック
Call stack consumption in recursive calls
20160428 html5jwebplat
n * factorial(n - 1); のバイトコード
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
20160428 html5jwebplat
コールスタックサイズの調査
Runtime Call stack size
Firefox 50994
Google Chrome 10402
node.js 11034


コンソールで実行すると call stack があふれる
コンソールで実行すると call stack があふれる
strict モードの末尾再帰はインライン展開される(ES2015)
インライン展開のイメージ
パフォーマンス
普通のエラーハンドリング
Promiseによるエラーハンドリング
イベント:時系列データ
イベント A B C D
20160428 html5jwebplat

More Related Content

PPTX
MP2011#01
PDF
asm.js x emscripten: The foundation of the next level Web games
PDF
関数型プログラミング in javascript
PDF
20150512 webgl-off-the-main-thread
PDF
20160803 devrel
PDF
20160601 devtools
PDF
20160713 webvr
PDF
Designing Teams for Emerging Challenges
MP2011#01
asm.js x emscripten: The foundation of the next level Web games
関数型プログラミング in javascript
20150512 webgl-off-the-main-thread
20160803 devrel
20160601 devtools
20160713 webvr
Designing Teams for Emerging Challenges

Similar to 20160428 html5jwebplat (16)

PDF
Xcodeを便利に使って爆速開発する #yxcm
PPTX
複数言語に触れてIoTの表現の幅を広げよう
PPTX
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
PPTX
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PPTX
The evolution of c#
PDF
Retry monad for transient fault handling
PPTX
フロントエンドの技術を刷新した話し。
PDF
HTML5スマートフォン業務アプリ開発セミナー(応用)テキストの抜粋
PDF
初心者向けGo言語勉強会
PPTX
Visual Studio による開発環境・プログラミングの進化
PPTX
第13回 CreatorsMeetup 〜HTML5時代に必要なスキルと考え方〜
PDF
Devsumi 17 d-2
PDF
devsumi17 d-2
PDF
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
PDF
Fxug
Xcodeを便利に使って爆速開発する #yxcm
複数言語に触れてIoTの表現の幅を広げよう
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
メルカリ・ソウゾウでは どうGoを活用しているのか?
The evolution of c#
Retry monad for transient fault handling
フロントエンドの技術を刷新した話し。
HTML5スマートフォン業務アプリ開発セミナー(応用)テキストの抜粋
初心者向けGo言語勉強会
Visual Studio による開発環境・プログラミングの進化
第13回 CreatorsMeetup 〜HTML5時代に必要なスキルと考え方〜
Devsumi 17 d-2
devsumi17 d-2
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Fxug
Ad

More from Noritada Shimizu (20)

PDF
Mozilla とブラウザゲーム
PDF
2016 gunma.web games-and-asm.js
PDF
20151224-games
PDF
20151128 firefoxos-handson
PDF
20151117 devtools
PDF
Inspection & Tweak: Firefox を使ったフロント開発
PDF
20150822 osc-shimane
PDF
20150829 firefox-os-handson
PDF
20150829 firefox-os
PDF
20150727 Development tools for Firefox OS apps
PDF
Firefox OS でアプリを作るときに気をつけたい N 個のこと
PDF
Firefox OSアプリ開発ハンズオン(Hello World編)
PDF
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
PDF
Application submission, management and manetization in Firefox Marketplace
PDF
つくろう!Firefox OS アプリ
PDF
20150118 firefoxos-handson-helloworld
PDF
20141115 fx os-codereading
PDF
20141030 html5j-firefox os-deviceapi
PDF
20140830 firefox os-sampler
PDF
20140801 webrtc on-firefox
Mozilla とブラウザゲーム
2016 gunma.web games-and-asm.js
20151224-games
20151128 firefoxos-handson
20151117 devtools
Inspection & Tweak: Firefox を使ったフロント開発
20150822 osc-shimane
20150829 firefox-os-handson
20150829 firefox-os
20150727 Development tools for Firefox OS apps
Firefox OS でアプリを作るときに気をつけたい N 個のこと
Firefox OSアプリ開発ハンズオン(Hello World編)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
Application submission, management and manetization in Firefox Marketplace
つくろう!Firefox OS アプリ
20150118 firefoxos-handson-helloworld
20141115 fx os-codereading
20141030 html5j-firefox os-deviceapi
20140830 firefox os-sampler
20140801 webrtc on-firefox
Ad

20160428 html5jwebplat