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
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
110
Microservices using Node.js and RabbitMQ
carolpc
0
1.7k
Other Decks in Programming
See All in Programming
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
480
XHTMLが残したもの
yosuke_furukawa
PRO
2
470
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
300
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
450
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
130
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
180
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
120
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
KATA
mclloyd
PRO
35
15k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
690
Statistics for Hackers
jakevdp
799
230k
Skip the Path - Find Your Career Trail
mkilby
1
220
It's Worth the Effort
3n
188
29k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
WENDY [Excerpt]
tessaabrams
12
39k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
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!