Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Funcional na prática

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Kassiano Kassiano
December 12, 2018

Kotlin Funcional na prática

Apresentação feita no Kotlin Meetup SP #05

Avatar for Kassiano

Kassiano

December 12, 2018
Tweet

More Decks by Kassiano

Other Decks in Programming

Transcript

  1. A boa noticia ... Kotlin é uma linguagem orientada a

    objetos com algumas caracteristicas e possibilidades de programação funcional.
  2. Pipeline de funções • Considere o seguinte fluxo: 1. Dividir

    dois valores inteiros 2. Elevar o resultado ao quadrado 3. Adicionar 2 ao resultado
  3. Problemas da abordagem anterior • Legibilidade de código • As

    coisas podem ir ficando realmente complexas a medida que eu adiciono mais funções a esse fluxo. Ok. E então como resolver em uma abordagem funcional ?
  4. Utilizando o conceito de pipeline de funções • Para conseguir

    isso em Kotlin, vamos criar uma função de extensão para o tipo Int chamada pipe • A função pipe é aplicada a um Int e recebe uma outra função de assinatura Int -> Int
  5. Porem, temos um problema O que aconteceria se a seguinte

    chamada fosse feita? Ganhamos uma Exception de brinde!
  6. Acho que foi uma solução ruim 1. A função virou

    uma função mentirosa, ela nos diz que retorna um Int, no entanto isso é uma mentira porque nem sempre isso acontece. Ela pode gerar uma exception. 2. Ela continua lançando a Exception e não me adiantou muita coisa Função mentirosa
  7. A função talvez nos retorna um Int, vamos então criar

    um DataType para representar isso Vou chamar esse DataType de “Maybe” porque talvez ele me retorna um valor.
  8. Mas o que é exatamente esse Maybe? • É simplesmente

    um wrapper que pode conter um valor ou não. • Caso esse wrapper tenha um valor utilizamos a classe Some, caso contrário utilizamos o objeto None
  9. Como podemos acessar o valor desse Wrapper? • Podemos fazer

    uma função map ! A função map irá abrir esse wrapper e aplicar uma função ao valor e devolver um novo wrapper.
  10. E se quando abrirmos o Wrapper ele estiver com valor

    Nothing ? • Nesse caso, simplesmente fecharemos o wrapper e devolveremos sem aplicar função nenhuma.
  11. A biblioteca Arrow É uma biblioteca para programação funcional tipada

    em Kotlin. A Arrow visa fornecer uma “lingua franca” de interfaces e abstrações através das bibliotecas do Kotlin. Para isso, inclui os tipos de dados mais populares, classes de tipos e abstrações, como Option, Try, E /, IO, Functor, Applicative, Monad.
  12. Referências Functional Programming with Kotlin - Hadi Hariri • https://www.youtube.com/watch?v=eNe5Nokrjdg

    Whats is a Monad? - Prof. Graham Hutton • https://www.youtube.com/watch?v=t1e8gqXLbsU • Kotlin Functors, Applicatives, And Monads in Pictures. - Alberto Ballano • https://hackernoon.com/kotlin-functors-applicatives-and-monads-in- pictures-part-1-3-c47a1b1ce251
  13. Referências • Building an Android app using Functional Programming –

    Leandro Fereira • https://medium.com/@lehen01/arrow-101-building-an-android-app- using-functional-programming-fe959675d96d • Programação Funcional Avançada: Monads em JavaScript - Matheus Lima • https://medium.com/tableless/programa%C3%A7%C3%A3o- funcional-avan%C3%A7ada-monads-em-javascript-862e8588fcdf