O documento apresenta o currículo e experiência de um desenvolvedor de software, incluindo suas habilidades em programação funcional e protocolos/conceitos como Monoid, Functor e Monad. O autor também fornece referências adicionais sobre tópicos de programação funcional.
FISIOLOGIA DA REPRODUÇÃO. matéria de fisiologia animal
Monads, Functors e Módulos em Swift
1.
2. Quem sou eu
• Mestre em Computação pelo IME-USP
• Desenvolvedor C desde 2002
• Objective-C desde 2007 (coisas básicas em Mac OS X antes do iPhone!)
• iOS desde 2010
• Swift desde Agosto/2015
• Tech Lead na Concrete Solutions (estamos contratando)
• Organizador do CocoaHeads SP
• Colaborador do CocoaHeads BR
• Colaborador da Embaixada Brasileira de Appsterdam
3. Compartilhando código e dependências entre plataformas
Escrevendo uma vez e reutilizando em iOS,
tvOS, watchOS, macOS 😂
5. Como alterei o tema da minha palestra
E esqueci de enviar a atualização
6. Usando POP com Programação Funcional
Como entender algumas abstrações usando
Protocol Oriented Programming
7. A Formula
• Descreva em linguagem natural
• Escreva a assinatura do tipo
• Implemente a logica
• Teste seu código
(não necessariamente nessa ordem)
8. O que é programação funcional?
• Estilo de programação
• First Class Functions
• Modularização
• Efeitos colaterais
• Imutabilidade
9. O que é programação funcional?
A monad is just a monoid in the category of endofunctors, what's the
problem?
Crockford’s Law
In addition to its being good and useful, it's also cursed. The curse of
the monad is that once you get the epiphany, once you understand oh,
that's what it is, you lose the ability to explain it to anybody else.
23. protocol Mappable {
associatedtype Element
static func map<OutType,
OutMappable: Mappable where Element == OutType>(
transform: (Element -> OutType)
) -> OutMappable
}
24. extension Array: Mappable {
func map<OutType>(transform: (Element -> OutType)) -> [OutType] {
var result = Array<OutType>()
for e in self {
result.append(transform(e))
}
return result
}
}
25. enum Result<ValueType>: Mappable {
case Failure(error: ErrorType)
case Success(value: ValueType)
func map<OutType>(transform: ValueType -> OutType) ->
Result<OutType> {
switch self {
case .Failure(let error): return .Failure(error)
case .Success(let value):
return .Success(value: transform(value))
}
}
}
26. protocol Mappable {
associatedtype Element
func map<OutType,
OutMappable: Mappable where Element == OutType>(
transform: (Element -> OutType)
) -> OutMappable
}
33. Futures e Promises
Future - objeto mantendo um valor que pode estar disponível em algum
momento
• se o bloco de execução não terminou, dizemos que o Future ainda não
terminou
• ao completar a execução, temos um valor ou um erro - Result FTW
Promise - “extensão” do Future
• Pode retornar um Future
• Promise pode não completar/executar
• read/write
53. A monad is just a monoid in the category of endofunctors, what's the
problem?
http://stackoverflow.com/questions/3870088/a-monad-is-just-a-monoid-in-the-
category-of-endofunctors-whats-the-issue
Incompleto: piada criada em “A Brief, Incomplete, and Mostly Wrong History
of Programming Languages”
Qual o problema?
54. Então, o que é uma Monad?
All told, a monad in X is just a monoid in the category of endofunctors of X,
with product × replaced by composition of endofunctors and unit set by the
identity endofunctor.
A monad is just a monoid in the category of endofunctors, what's the
problem?
Vs
55. Então, o que é uma Monad?
Uma forma de criar complexidade, partindo de simplicidade
Monads famosas em Haskell (ainda não implementadas em Swift)
• I/O Monad
• State Monad
• Reader/Writer Monad
• Continuation Monad
56. Outras coisas que podem ser criadas
com monads
• Frameworks reativos
• DSL
• trabalho com coleções (LINQ)
57. Outras referências
• Finally Understand Monads with this One Weird Trick by Andy Bartholomew
• Monads are Not Monsters by Junior Bontognali
• Don’t Fear the Monads by Bryan Beckman
• Abstraction, intuition, and the “monad tutorial fallacy” by Brent
• Haskell for Mac - App Store