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
Programação Funcional: controlando complexidade...
Search
TK
December 05, 2018
Programming
78
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Programação Funcional: controlando complexidade & corretude
TK
December 05, 2018
Other Decks in Programming
See All in Programming
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
4
3.5k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
210
カツオ、ご期待ください
suneo3476
0
190
AmebaブログはKMPから卒業します
kmars0605
0
190
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
ChromeでローカルLLM
ryu1013
0
140
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
Workers Cache を知る
syumai
0
360
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The Language of Interfaces
destraynor
162
27k
Agile that works and the tools we love
rasmusluckow
331
22k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Navigating Weather and Climate Data
rabernat
0
560
The browser strikes back
jonoalderson
0
1.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
Programação Funcional Controlando complexidade & corretude
LEANDRO TK Software Developer @Worldpackers github.com/leandrotk @leandrotk_ @leandrotk_
O que é programação funcional?
“Paradigma de programação onde computações são representadas por funções ou
expressões puras, evitando efeitos colaterais e dados mutáveis e que utiliza amplamente composição de funções e funções de primeira classe”
Funções Puras 1. Determinística 2. Não existem efeitos colaterais
Determinística
Função Impura ✅ Não existem efeitos colaterais ❓ Determinística
Imagine que π = 42
Para o mesmo parâmetro, estamos retornando resultados diferentes
Função Pura ✅ Não existem efeitos colaterais ✅ Determinística
Não existem efeitos colaterais
Função Impura ✖ Determinística ❓ Não existem efeitos colaterais
Função Pura ✅ Não existem efeitos colaterais ✅ Determinística
Alguns benefícios 0. Função previsível 1. Facilmente testável 2. Melhor
entendimento da funcionalidade do código
Imutabilidade 0. Inalterável ao longo do tempo ou incapaz de
ser alterado 1. Evitar mudanças de estado para reduzir complexidade
“OO makes code understandable by encapsulating moving parts. FP makes
code understandable by minimizing moving parts.” - Michael Feathers
UrlSlugify “ I will be a url slug ” ↓
“i-will-be-a-url-slug” 0. downcase 1. strip 2. gsub
Mutabilidade em 3 níveis
Compondo funções s/ mutabilidade
Funções como valor
Retornando funções como valor
Poder de abstração: função como valor
0. Recebe função como valor 1. Evalua função
• Passa a função + • Passa a função -
Funções de alta ordem
Filter Map Reduce
Filter Dado uma lista de números, queremos filtrar os pares.
Filter Usando função select para filtrar os números pares
Map Pensando em transformação de listas
Map Dado uma lista de pessoas com nome e idade,
queremos uma lista de sentenças.
Map Pausa para o refactoring...
Map Usando função de alta ordem, programação declarativa e imutabilidade
Reduce Juntar uma coleção de elementos e colocar em um
“produto final”
Reduce “produto final” == soma de todos os elementos da
lista (Pensando imperativamente)
Usando reduce para gerar o “produto final” Reduce
Queremos a soma de preços de todos os pedidos Reduce
Composição “The act of breaking a complex problem down into
smaller problems, and composing simple solutions to form a complete solution to the complex problem.”
Composição de funções • Função como unidade que resolve um
pequeno problema • Composição de funções que resolvem problemas complexos
Composição de funções Aplicar uma função no resultado de outra
função → () → () → ( º )( ) ( ( ))
Compondo Pokemons
Pokemon Evolution Como queremos evoluí-los?
Pokemon Evolution Filtrando a lista de pokemons pelo `evolution-id`
Pokemon Evolution Pegar o primeiro e depois o nome do
pokemon
Pokemon Evolution Concatenar strings para formar a “evolução” Ex: “Pikachu
-> Raichu”
Compondo todas as funções
Controlando complexidade com programação funcional 0. Decomposição de problemas complexos
1. Abstração de estruturas de controle de fluxo 2. Determinístico. Completamente previsível
Valeu ✌ github.com/leandrotk @leandrotk_ @leandrotk_