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

Imperative Vs Functional

Imperative Vs Functional

A brief comparative of some styles and introduction to the new Scala FP courses for the local Cádiz Betabeers

Ad2476bf0540dfaa0fc30cb62c8e07da?s=128

Raúl Raja Martínez

April 25, 2014
Tweet

Transcript

  1. λ Imperative Vs

  2. λ Imperative Vs > A style of building the structure

    and elements of computer programs, that treats computation as the evaluation of mathematical functions and avoids state and mutable data > A programming paradigm that describes computation in terms of statements that change a program state!
  3. @raulraja 47 Nothing new under the sun… FP has been

    ignored for a while
  4. - 1958 LISP - 1975 Scheme - 1984 Common LISP

    - 1986 Erlang - 1987 Caml - 2003 Scala - 2005 F# - 2007 Clojure History
  5. λ Imperative Vs

  6. λ Imperative Vs > Since 2002, we can only hold

    this true if we add extra cores. ! In order for today's developers to benefit from the speed increases Moore's Law offers, they need to take advantage of multicore processors ! Shit! Concurrency is hard! -Imperative Programming! ! Not hard! just make it immutable! - Functional Programming > The numbers of transistors on integrated circuits doubles approximately every two years, so your programs get faster without you doing any extra work - Moore’s Law! ! !Awesome - Imperative Programming!
  7. λ Imperative Mutable Immutable State var article = new Article()!

    article.title = "9 Cards"! article.description = "Home Launcher"! …! article.title = "9 Cards by 47”! ! val a = Article(! ! title = "9 Cards",! ! description = "Home Launcher"! )! article.title = "9 Cards"! …! val b = a.copy(title = "9 Cards by 47”)! > Secure, Thread-Safe > Not Thread-Safe
  8. λ Imperative Iteration and mutability Lambdas in Higher Order Functions

    HOF List<String> n = new …! for (name : names) {! ! if (name.startsWith(value)) {! ! ! n.add(name)! ! }! }! ! val n = names filter (_ startsWith value)! > Simpler > Harder control flow
  9. λ Imperative Task and State Definition / Lazyness Flow def

    fibo(n: Int): Int = {! if (n <= 1) {! return n! }! var fibo = 1! var fiboPrev = 1! for (i <- 2 until n) {! val temp = fibo! fibo += fiboPrev! fiboPrev = temp! }! fibo! } def fibo(in: Int): Int = in match {! case n if n <= 0 => 0! case 0 | 1 => 1! case n => fibo(n - 1) + fibo(n- 2)! }! ! … or …! ! def fib : Stream[Long] = {! def fibF(a: Long, b: Long) : Stream[Long] = ! ! a #:: fibF(b, a+b)! fibF(0, 1)! } > How to perform tasks (algorithms) and how to track changes in state. > Recursion and lazy structures
  10. λ Imperative Statefull Stateless Flow def add(a: Int) = this.b

    = this.b + a def (a: Int, b : Int): Int = a + b > IO is necessary but others may be dangerous > A pure function does not change data outside of the function
  11. Resources λ

  12. Resources λ

  13. Learn FP λ https://github.com/47deg/scala-crash-course-es Dia 1 - Conceptos Básicos (Martes

    13 de Mayo) ! Breve introducción a la programación funcional en general y a Scala en particular y como las técnicas de programación funcional pueden ayudarte a ser más productivo como programador. Herramientas que se suelen utilizar y nuestro primer programa en Scala. ! Introducción (20m Teoría) Herramientas (20m Práctica) Sintaxis Básica (30m Teoría) Hello World (10 min Práctica)
  14. Learn FP λ https://github.com/47deg/scala-crash-course-es Día 2 - Esenciales del día

    a día (Martes 27 de Mayo) ! Uso del pattern matching para la simplificación de decisiones y casos en el código, implícitos, opciones y colecciones (map, flatMap, match, implicit, Option, Try, Either) ! Pattern Matching (15m Teoría y Práctica) Errores y Opciones (30m Teoría y Práctica) Colecciones (45m Teoría y Práctica) Monads (30m Teoría y Práctica)
  15. Learn FP λ https://github.com/47deg/scala-crash-course-es Día 3 - Asincronia y Concurrencia

    (Prog Reactiva) (Martes 10 de Junio) ! Haz que tus aplicaciones no bloqueen y se ejecuten en paralelo sacandole el maximo partido con técnicas de programación reactiva. ! Futuros y Promesas (1h Teoría y Práctica) Actores (1h Teoría y Práctica)
  16. Learn FP λ https://github.com/47deg/scala-crash-course-es Dia 4 - Técnicas Funcionales Avanzadas

    (Martes 24 de Junio)! ! Una pequeña introducción a un mundo que hay por aprender si aun no sabes programación funcional ! Currying y Funciones Parciales (30m Teoría y Práctica) Funciones de Alto Orden (30m Teoría y Práctica) Type Classes (15m Teoría)
  17. Learn FP λ https://github.com/47deg/scala-crash-course-es Día 5 - Micro Hackaton (Martes

    1 de Julio) ! Una app reactiva con Play2 Scala mostrando algunos de los conceptos aprendidos en el curso. ! Anatomia de una App Play 2 (15m Teoria) App (2h Practica)