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
Introduction to Functional Programming with Jav...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Carolina Pascale Campos
April 19, 2017
Programming
160
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Functional Programming with JavaScript
Carolina Pascale Campos
April 19, 2017
More Decks by Carolina Pascale Campos
See All by Carolina Pascale Campos
Building a sustainable codebase with FP - ElixirConfEU
carolpc
2
150
Building a sustainable architecture
carolpc
2
160
Maintaining consistency in distributed systems with an effect machine
carolpc
0
52
Building a sustainable Architecture
carolpc
0
66
Arquitetura de Aplicações Web utilizando Serverless
carolpc
0
120
Working with Serverless - Compact version
carolpc
1
190
Working with Serverless in 2017
carolpc
0
100
Microservices using Node.js and RabbitMQ
carolpc
0
1.7k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
数百円から始めるRuby電子工作
tarosay
0
140
継続モナドとリアクティブプログラミング
yukikurage
3
700
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
150
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
200
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.1k
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
180
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
310
Prompt Engineering for Job Search
mfonobong
0
400
Done Done
chrislema
186
16k
Building an army of robots
kneath
306
46k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
First, design no harm
axbom
PRO
2
1.2k
What's in a price? How to price your products and services
michaelherold
247
13k
Context Engineering - Making Every Token Count
addyosmani
9
1k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Transcript
I N T R O D U C T I
O N T O F U N C T I O N A L P R O G R A M M I N G W I T H J AVA S C R I P T
None
W H O A M I ? Carolina Pascale Campos
Software Developer at Codeminer42 Computer Scientist student at UFSCar
F U N C T I O N A L
P R O G R A M M I N G H I S T O RY
W H AT I S F U N C T
I O N A L P R O G R A M M I N G ?
None
F U N C T I O N S F
I R S T- C L A S S C I T I Z E N S
Functions 1 const characterName = (name) => { 2 return
console.log(name); 3 }; 4 5 characterName('Batman'); //Batman
Objects { name: 'Alfred', occupation: 'Butler', villain: false, age: 70
}
Input Array const characters = [ { name: 'Alfred', …},
{ name: 'Batman', …}, { name: 'Harley Quinn’, …}, { name: 'Joker', …} ];
H I G H E R - O R D
E R F U N C T I O N S
Higher-order Functions 1 const villain = (character) => { 2
return character.villain; 3 }; 4 5 const name = (character) => { 6 return character.name; 7 }; 8 9 const villainNames = 10 characters 11 .filter(villain) 12 .map(name); 13 14 console.log(villainNames); // [ 'Harley Quinn', 'Joker' ]
P U R E F U N C T I
O N S S TAT E L E S S
Impure Function 1 let batmanAge = 30; 2 3 function
incrementAge() { 4 return batmanAge++; 5 } 6 7 incrementAge(); //31 8 incrementAge(); //32
Pure Function 1 let batmanAge = 30; 2 3 function
incrementAge(age) { 4 return age++; 5 } 6 7 incrementAge(batmanAge); //31 8 incrementAge(batmanAge); //31 9 console.log(batmanAge);
D E C L A R AT I V E
E X P L I C I T
Declarative programming is “the act of programming in languages that
conform to the mental model of the developer rather than the operational model of the machine”.
None
Imperative Programming 1 function onlyAge(characters) { 2 const age =
[]; 3 const size = characters.length; 4 5 for (let i = 0; i < size; i++) { 6 age.push(characters[i].age); 7 } 8 9 return age; 10 } 11 12 onlyAge(characters); //[ 70, 30, 26, 35 ]
Declarative Programming 1 function onlyAge(cast) { 2 return cast.map(cast =>
cast.age); 3 } 4 5 onlyAge(cast);
I M M U TA B L E
Mutability 1 const hero = { 2 name: 'Batman', 3
age: 30 4 }; 5 6 function changeAge(hero) { 7 const newHero = hero; 8 newHero.age = 31; 9 10 return newHero; 11 } 12 13 const heroDifferentAge = changeAge(hero); 14 console.log(heroDifferentAge, hero);
None
Immutability 1 const hero = { 2 name: 'Batman', 3
age: 30 4 }; 5 6 const changeAge = (hero, newAge) => { 7 return Object.assign( 8 {}, hero, { age: newAge } 9 ); 10 }); 11 12 const newHero = changeAge(hero, 32);
C L O S U R E S E N
C A P S U L AT I O N
Closure 1 const characterQuote = () => { 2 3
const quote = 'I am Batman'; 4 5 const display = () => { 6 return console.log(`${quote}`); 7 }; 8 display(); 9 }; 10 11 characterQuote(); // I am Batman
F I LT E R , M A P, R
E D U C E
Filter
Map
Map
Reduce
M A P
Map 1 const occupations = 2 characters.map((character) => { 3
return character.occupation; 4 }); 5 6 console.log(occupations); 7 // [ 'Butler', 'CEO of Wayne Enterprises', 'Former psychiatrist', 'Vilain' ]
R E D U C E
Reduce 1 const totalAge = 2 characters.reduce((sum, character) => {
3 return sum + character.age; 4 }, 0); 5 6 console.log(totalAge); // 174
C U R RY
Curry 1 const helloBatman = (name) => { 2 return
(greeting) => greeting + name; 3 }; 4 5 const batman = helloBatman('batman'); 6 7 batman('hello'); //hellobatman
PA RT I A L A P P L I
C AT I O N
Partial Application 1 const batman = 40; 2 const joker
= 29; 3 const alfred = 70; 4 5 const sumAges = (batman, joker, alfred) => { 6 return batman + joker + alfred; 7 }; 8 9 const partial = (fn, ...args) => { 10 return fn.bind(null, ...args); 11 }; 12 13 const partialSum = partial(sumAges, batman, joker) 14 15 console.log(partialSum(alfred)); // 139
None
None
Where to find me? https://github.com/carolpc https://twitter.com/CarolinaPascale
Codeminer42
[email protected]
We’re hiring!