name: portada class: portada-slide, center, middle # Programació funcional --- --- # Funcions com a objecte - Podem treballar amb funcions com si fossin instàncies - El tipus funció es defineix com: ``` (tipus paràmetre) -> tipus retorn ``` - La fletxa apunta del arguments que pren -> al què retorna --- # Exemple del tipus funció ``` fun sum(a: Int, b: Int): Int = a + b fun sayHello() { println("Hello") } class Person(val name : String){ fun printName() { println(name)} } ``` - sum té el tipus (Int, Int) -> Int - sayHello té el tipus () -> Unit - printName té el tipus Person.()->Unit --- # Funcions com a paràmetres ``` fun applyAndSum(a: Int, b: Int, transformation: (Int) -> Int): Int { return transformation(a) + transformation(b) } fun same(x: Int) = x fun square(x: Int) = x * x fun triple(x: Int) = 3 * x applyAndSum(1, 2, ::same) // returns 3 = 1 + 2 applyAndSum(1, 2, ::square) // returns 5 = 1 * 1 + 2 * 2 applyAndSum(1, 2, ::triple) // returns 9 = 3 * 1 + 3 * 2 ``` --- # Exemple ``` fun isNotDot(c: Char): Boolean = c != '.' val originalText = "I don't know... what to say..." val textWithoutDots = originalText.filter(::isNotDot) ``` El resultat de textWithoutDots és "I don't know what to say". --- # Exemple2 ``` fun myRepeat(times: Int, op : ()->Unit){ for(i in 0..times){ op() } } myRepeat(10){ println("hello!") } ```