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

Kotlin Funcional na prática

Kassiano
December 12, 2018

Kotlin Funcional na prática

Apresentação feita no Kotlin Meetup SP #05

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