Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Functional Programming Applied in JS
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Tak Yanagida
December 22, 2013
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Functional Programming Applied in JS
「JSで実際に役立った関数型プログラミング」
jsCafe #17で発表しました。
関数型プログラミングの考え方を使うことで、JavaScriptのコードがすっきり書けた事例を紹介。
Tak Yanagida
December 22, 2013
More Decks by Tak Yanagida
See All by Tak Yanagida
Non-mercator Projection with Mapnik
tyanagida
1
1.3k
How much we have to study English?
tyanagida
0
120
Brief Introduction of jQuery Mobile
tyanagida
0
140
PowerShell for LL Users
tyanagida
0
1.3k
Other Decks in Programming
See All in Programming
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
140
Cloudflare is Agents
chimame
0
150
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
360
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
250
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
140
What's New in Android 2026
veronikapj
0
260
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
550
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
320
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
610
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
470
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
350
How to make the Groovebox
asonas
2
2.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
990
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Amusing Abliteration
ianozsvald
1
240
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Invisible Side of Design
smashingmag
301
52k
BBQ
matthewcrist
89
10k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
460
Transcript
JSで実際に役立った 関数型プログラミング 柳田 @tyanagida
ダムの地図公開してます http://maps.ontarget.cc/dams/
ダムの地図公開してます http://maps.ontarget.cc/dams/
自己紹介補足
自己紹介補足 • 古めのエンジニア コンピュータ歴約30年 Linuxは0.99から
自己紹介補足 • 古めのエンジニア コンピュータ歴約30年 Linuxは0.99から • 実はデューク大学のMBA
自己紹介補足 • 古めのエンジニア コンピュータ歴約30年 Linuxは0.99から • 実はデューク大学のMBA ティム・クックと一緒
自己紹介補足 • 古めのエンジニア コンピュータ歴約30年 Linuxは0.99から • 実はデューク大学のMBA •
ITエンジニアのための英語読解講 座はじめました ティム・クックと一緒
自己紹介補足 • 古めのエンジニア コンピュータ歴約30年 Linuxは0.99から • 実はデューク大学のMBA •
ITエンジニアのための英語読解講 座はじめました ティム・クックと一緒 英語ドキュメントの分からない 箇所があったら解説します http://d.hatena.ne.jp/casualstartup/20131117/it_english_grammar
関数って何?
関数って何? 関数=函数
関数って何? 関数=函数 大昔の教科書表記
関数って何? 関数=函数 f a b ・・・ 大昔の教科書表記 y
関数って何? 関数=函数 f a b ・・・ 大昔の教科書表記 y 値を入力したら、値が返ってくる (副作用はなし)
例題: FizzBuzz
例題: FizzBuzz 1. 1~100まで順に表示する 2. ただし、 1. 3の倍数のときには代わりにFizzと表示 2. 5の倍数のときには代わりにBuzzと表示
3. 15の倍数のときには代わりにFizzBuzzと表示
例題: FizzBuzz 1. 1~100まで順に表示する 2. ただし、 1. 3の倍数のときには代わりにFizzと表示 2. 5の倍数のときには代わりにBuzzと表示
3. 15の倍数のときには代わりにFizzBuzzと表示 まずfor (i = 1; i <= 100; i++)
例題: FizzBuzz 1. 1~100まで順に表示する 2. ただし、 1. 3の倍数のときには代わりにFizzと表示 2. 5の倍数のときには代わりにBuzzと表示
3. 15の倍数のときには代わりにFizzBuzzと表示 まずfor (i = 1; i <= 100; i++) これは手続き脳
関数脳の場合
関数脳の場合 1 ・・・ 2 3 100
f f f f 関数脳の場合 1 ・・・ 2 3 100
f f f f 関数脳の場合 1 ・・・ 2 3 100
1 2 Fizz Buzz
f f f f 関数脳の場合 1 ・・・ 2 3 100
1 2 Fizz Buzz ・fは、数字を1つ受け取って、FizzやBuzzを返す関数
f f f f 関数脳の場合 1 ・・・ 2 3 100
1 2 Fizz Buzz ・fは、数字を1つ受け取って、FizzやBuzzを返す関数 ・配列の各要素に、関数を適用する操作が”map”
JavaScriptで書く var f = function (x) { if (x %
15 === 0) return 'FizzBuzz'; if (x % 5 === 0) return 'Buzz'; if (x % 3 === 0 ) return 'Fizz'; return x; } [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].map(f);
JavaScriptで書く var f = function (x) { if (x %
15 === 0) return 'FizzBuzz'; if (x % 5 === 0) return 'Buzz'; if (x % 3 === 0 ) return 'Fizz'; return x; } [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].map(f); ECMA Script 5.1以降
ダムの地図で使った場所: フィルタの処理
ダムの地図で使った場所: フィルタの処理 • if文が結構ややこしい • フィルタ条件は増減あるかも • ダムの分類も変わるかも • 画面内のダムだけ対象か、全ダ
ム対象か、決めてない
ダムの地図で使った場所: フィルタの処理 • if文が結構ややこしい • フィルタ条件は増減あるかも • ダムの分類も変わるかも • 画面内のダムだけ対象か、全ダ
ム対象か、決めてない Mapっぽく書いたらすっきり!!
ついでにreduceはこんな感じ * この操作をfoldと呼ぶ言語もある f f f a1 ・・・ a2 a3
an ・・・ y a4 f
言いたかったこと 関数型プログラミングを知って 「コーディングの引き出し」 増やしましょう
参考文献 • プログラミングGauche Scheme (LISP)の本と見せかけつ つ、同時に関数型プログラミング の初歩に触れられる * FizzBuzzの例題は、この本
をもとにJSで書き換えました