Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Introduction to Functional Programming with Jav...
Search
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
57
Building a sustainable Architecture
carolpc
0
73
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
110
Microservices using Node.js and RabbitMQ
carolpc
0
1.7k
Other Decks in Programming
See All in Programming
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.1k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
150
AWSに止められる覚悟してますか?
morizo_1984
2
490
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
5.1k
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
100
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
1
680
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
SREの越境 / SRE Collaboration
y0hgi
2
290
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
App Intentsのビルドプロセスを支える技術
kntkymt
0
480
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
170
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Fireside Chat
paigeccino
43
4k
A Tale of Four Properties
chriscoyier
163
24k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
540
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
Exploring anti-patterns in Rails
aemeredith
4
520
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
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!