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
Carolina Pascale Campos
April 19, 2017
Programming
150
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
150
Maintaining consistency in distributed systems with an effect machine
carolpc
0
49
Building a sustainable Architecture
carolpc
0
61
Arquitetura de Aplicações Web utilizando Serverless
carolpc
0
120
Working with Serverless - Compact version
carolpc
1
180
Working with Serverless in 2017
carolpc
0
95
Microservices using Node.js and RabbitMQ
carolpc
0
1.7k
Other Decks in Programming
See All in Programming
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
740
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
2
750
スマートグラスで並列バイブコーディング
hyshu
0
260
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
160
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Performance Engineering for Everyone
elenatanasoiu
0
210
Contextとはなにか
chiroruxx
1
370
Oxlintのカスタムルールの現況
syumai
6
1.1k
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
280
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
300
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
610
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
310
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Become a Pro
speakerdeck
PRO
31
6k
Code Review Best Practice
trishagee
74
20k
A Tale of Four Properties
chriscoyier
163
24k
So, you think you're a good person
axbom
PRO
2
2.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
190
Designing for Timeless Needs
cassininazir
1
260
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
170
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!