13. O que é uma função?
É o mapeamento de uma entrada para uma saída.
14. O que é uma função?
É o mapeamento de uma entrada para uma saída.
15. O que é uma função?
É o mapeamento de uma entrada para uma saída.
Exemplo:
f(x) = x + 1
16. O que é uma função?
É o mapeamento de uma entrada para uma saída.
Exemplo:
f(x) = x + 1
f(2) == 3
f(3) == 4
17. O que é uma função?
É o mapeamento de uma entrada para uma saída.
Exemplo:
f(x) = x + 1
f(2) == 3
f(3) == 4
O output é determinado pelo input!
18.
19.
20.
21. 1. Testes automatizados visam garantir as regras de
negócios.
﹡ Testes seguem a estrutura de uma função. Ex: (Arrange, Act, Assert)
2. Linters servem de input para um código padronizado.
3. Retrospectivas ágeis avaliam o output para melhorar o
próximo input.
4. UX - Discovery > Delivery
Princípios funcionais para a vida
22. "Most of the biggest problems in
software are problems of
misconception.
— Rich Hickey
(Criador da linguagem Closure)
25. Lambda Calculus
● Criada em 1930 (88 anos atrás).
● Representa computações matemáticas através de funções
anônimas.
● Exemplos de funções:
quadrado = (x) ↦ x * x
soma_dos_quadrados = (x, y) ↦ x² + y²
27. Lisp
● Criada em 1958 (60 anos atrás).
● Segunda linguagem de programação mais antiga. (Fortran -
imperativa - é por apenas um ano, há mais antiga.
● Sintaxe influenciada pelo λ-calculus.
● Exemplos de
funções:
28. Lisp
● Criada em 1958 (60 anos atrás).
● Segunda linguagem de programação mais antiga. (Fortran -
imperativa - é por apenas um ano, há mais antiga.
● Sintaxe influenciada pelo λ-calculus.
● Exemplos de
funções:
37. Resumo até aqui...
1. Programação funcional tem origem na matemática.
2. λ-calculus: Representa computações matemáticas através de
funções anônimas.
3. LISP (a primeira linguagem funcional) tem influência do λ-calculus.
51. Desse ponto em diante, todos os
conceitos poderão ser aplicados
em qualquer linguagem que
suporte princípios funcionais.
Ex: Javascript, Python, Java (8+), Kotlin, Swift...
52. Desse ponto em diante, todos os
conceitos poderão ser aplicados
em qualquer linguagem que
suporte princípios funcionais.
Ex: Javascript, Python, Java (8+), Kotlin, Swift...
73. Pure functions (1 de 4)
Operações sem side-effects (memória ou I/O)
Como a função tem acesso a variável counter?
74. Pure functions (1 de 4)
Operações sem side-effects (memória ou I/O)
Como a função tem acesso a variável counter?
Resposta: closure
75. Pure functions (1 de 4)
Operações sem side-effects (memória ou I/O)
O que significa closure?
76. Pure functions (1 de 4)
Operações sem side-effects (memória ou I/O)
O que significa closure?
R: Capacidade da função em "lembrar" do escopo em que
foi declarada.
89. O que é uma função?
É o mapeamento de uma entrada para uma saída.
Exemplo:
f(x) = x + 1
f(2) == 3
f(3) == 4
O output é determinado pelo input!
90. O que é uma função?
É o mapeamento de uma entrada para uma saída.
Exemplo:
f(x) = x + 1
f(2) == 3
f(3) == 4
O output é determinado pelo input!
Quanto mais garantido o input melhores
serão as garantias (corretude) do output.
105. Operações sem side-effects (memória ou I/O)Imutabilidade
Referential transparency (4 de 4)
Em Ruby, podemos invocar
qualquer callable com .()
106. Operações sem side-effects (memória ou I/O)Imutabilidade
Referential transparency (4 de 4)
Em Ruby, podemos invocar
qualquer callable com .()
sum.call(1, 1)
sum.(1, 1)
160. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
161. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
162. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
163. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
Encapsula a construção de queries complexas.
164. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
Encapsula a construção de queries complexas.
Encapsula as regras de negócio da sua aplicação.
165. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
Encapsula a construção de queries complexas.
Encapsula as regras de negócio da sua aplicação.
Potencializar + simplificar =
Código expressivo,
sequencialmente lógico e modular.
171. Single responsibility principle
Open/closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
CreateUser
CreateUser.new(UserRepository)
.call == Design by contract
Composition over Inheritance
172. Single responsibility principle
Open/closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
CreateUser
CreateUser.new(UserRepository)
.call == Design by contract
Composition over Inheritance
CreateUser é abstrato por não ter
implementar o Repository
173. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
Encapsula a construção de queries complexas.
Encapsula as regras de negócio da sua aplicação.
Pensando no ActiveRecord…
Como ser SOLID já que o mesmo tem tantas
funcionalidades / responsabilidades?
174. ActiveRecord model
Mapeia os registros do banco de dados para objetos Ruby
Contém as regras de validação de estado dos objetos
Gerencia as operações de CRUD
Permite criar comandos para serem executados antes e depois das
operações de CRUD. (callbacks)
Encapsula a construção de queries complexas.
Encapsula as regras de negócio da sua aplicação.
Pensando no ActiveRecord…
Como ser SOLID já que o mesmo tem tantas
funcionalidades / responsabilidades?
Resposta: Crie implementações para cada uma dessas
responsabilidades!
196. "The cost of adding a feature isn’t just
the time it takes to code it. The cost
also includes the addition of an
obstacle to future expansion. The
trick is to pick the features that don’t
fight each other."
— John Carmack