SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Programação
funcional em Swift
Mas…
O que é Programação
funcional?
"Programação funcional é um paradigma
de programação que visa tratar a
computação como avaliação de funções
matemáticas…" - Wikipedia (tradução livre)
Para programarmos usando esse
paradigma então temos de :
- tratar funções como equações
matemáticas…
- evitar mudança de estado…
- evitar dados mutáveis…
- programação funcional não deve
ter efeitos colaterais... ou seja
não alteram o mundo a sua volta...
Nos queremos somar o array no total…
var total = 0
let array = [0,1,2,3,4,5,6,7,8,9,10]
func add(){
for item in array{
total = total + item
}
}
add()
//total = 55
Quando temos de usar essa função mais
de uma vez o q ela faz?
add()
//total = 55
add()
//total = 110
add()
//total = 165
O problema é que
estamos alterando um
estado global…
Como seria uma forma funcional de
fazer isso?
func addfunctional(array:[Int]) ->Int
{
// uma forma reduzida é
// return array.reduce(0,combine: +)
return array.reduce(0){ total ,
number in total + number}
}
Usando varias vezes vc tem sempre o
mesmo resultado, quando a entrada é a
mesma…
addfunctional(array)
55
addfunctional(array)
55
addfunctional(array)
55
Map, Filter, Reduce….
O que são?
Map
Map é indicado quando vc precisa
transformar um array… ele mapeia uma
coleção e faz alguma coisa…
let array = [0,1,2,3,4,5,6,7,8,9,10]
let stringarray = array.map{
"($0)"
}
//[“0”,”1”,"2","3","4","5","6","7","8","9","10"]
Podemos usar funções também…
func square(x:Int) -> Int{
return x * x
}
let tot = array.map(square)
//[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Filter
O filter filtra um array retornando
um novo array com os elementos que
passam no teste.
let filterarray = array.filter{$0 >
5}
//filterarray = [6, 7, 8, 9, 10]
podemos usar também funções que
retornam bool…
func passaAlto(x:Int) -> Bool{
return x > 5
}
let filterarray2 =
array.filter(passaAlto)
//filterarray2 = [6, 7, 8, 9, 10]
Reduce
O reduce parte de um principio que é
modificado a cada passo do array.
Ele retorna o resultado da passagem
por todos os elementos.
let arrayreduce = array.reduce(0,
combine: +)
//55
É possível também usar da seguinte
forma, para usar funções no lugar de
operadores…
let arrayreduce2 = array.reduce(0)
{ (total, number) in total +
square(number) }
//385
Podemos usa-los juntos!!
let filterarray = array.filter{$0 > 5}
//filterarray = [6, 7, 8, 9, 10]
let filterarray = array.filter{$0 >
5}.map(square)
//filterarray = [36, 49, 64, 81, 100]
let filterarray = array.filter {$0 >
5}.map(square).reduce(0, combine: +)
//filterarray = 330
Praticamente todos os tipos
são tipos de variáveis.
Classes são excessão…
Um enum pode ser usado como varivel e testado
em um switch…
enum Result {
case Success(AnyObject)
case Failure(NSError)
}
func dividir(x:Int, y:Int) -> Result{
if y<1 {
return Result.Failure(NSError(domain:
"divide0", code: 1, userInfo: nil))
}
return Result.Success(x / y)
}
let result = dividir(1000, y: 2)
switch result {
case .Success(let mystuff):
let march = mystuff as! Int + 10 //
510
case .Failure(let error):
error
}
Curried functions…
Como isso funciona?? não sei, mas
funciona assim XD
func add(x: Int) ->Int ->Int {
return {y in return x + y}
}
let sum = add(2) // Int -> Int
let boom = sum(4) // 6
let things = add(10)(12) // 22
Obrigado
Vinicius Lima
@vnmontanhavn
vinicius.lima@concretetesolutions.com

Weitere ähnliche Inhalte

Ähnlich wie Programação funcional em Swift: map, filter e reduce

Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalEmanuel Gonçalves
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?Denis Costa
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Matheus Pereira
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Template method pattern
Template method patternTemplate method pattern
Template method patternEriko Morais
 

Ähnlich wie Programação funcional em Swift: map, filter e reduce (20)

Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Programação funcional no dia a dia
Programação funcional no dia a diaProgramação funcional no dia a dia
Programação funcional no dia a dia
 
Template method pattern
Template method patternTemplate method pattern
Template method pattern
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 

Programação funcional em Swift: map, filter e reduce

  • 2. Mas… O que é Programação funcional?
  • 3. "Programação funcional é um paradigma de programação que visa tratar a computação como avaliação de funções matemáticas…" - Wikipedia (tradução livre)
  • 4. Para programarmos usando esse paradigma então temos de : - tratar funções como equações matemáticas… - evitar mudança de estado… - evitar dados mutáveis… - programação funcional não deve ter efeitos colaterais... ou seja não alteram o mundo a sua volta...
  • 5.
  • 6. Nos queremos somar o array no total… var total = 0 let array = [0,1,2,3,4,5,6,7,8,9,10] func add(){ for item in array{ total = total + item } } add() //total = 55
  • 7. Quando temos de usar essa função mais de uma vez o q ela faz? add() //total = 55 add() //total = 110 add() //total = 165
  • 8. O problema é que estamos alterando um estado global…
  • 9. Como seria uma forma funcional de fazer isso? func addfunctional(array:[Int]) ->Int { // uma forma reduzida é // return array.reduce(0,combine: +) return array.reduce(0){ total , number in total + number} }
  • 10. Usando varias vezes vc tem sempre o mesmo resultado, quando a entrada é a mesma… addfunctional(array) 55 addfunctional(array) 55 addfunctional(array) 55
  • 11.
  • 13. Map
  • 14. Map é indicado quando vc precisa transformar um array… ele mapeia uma coleção e faz alguma coisa… let array = [0,1,2,3,4,5,6,7,8,9,10] let stringarray = array.map{ "($0)" } //[“0”,”1”,"2","3","4","5","6","7","8","9","10"]
  • 15. Podemos usar funções também… func square(x:Int) -> Int{ return x * x } let tot = array.map(square) //[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • 17. O filter filtra um array retornando um novo array com os elementos que passam no teste. let filterarray = array.filter{$0 > 5} //filterarray = [6, 7, 8, 9, 10]
  • 18. podemos usar também funções que retornam bool… func passaAlto(x:Int) -> Bool{ return x > 5 } let filterarray2 = array.filter(passaAlto) //filterarray2 = [6, 7, 8, 9, 10]
  • 20. O reduce parte de um principio que é modificado a cada passo do array. Ele retorna o resultado da passagem por todos os elementos. let arrayreduce = array.reduce(0, combine: +) //55
  • 21. É possível também usar da seguinte forma, para usar funções no lugar de operadores… let arrayreduce2 = array.reduce(0) { (total, number) in total + square(number) } //385
  • 23. let filterarray = array.filter{$0 > 5} //filterarray = [6, 7, 8, 9, 10] let filterarray = array.filter{$0 > 5}.map(square) //filterarray = [36, 49, 64, 81, 100] let filterarray = array.filter {$0 > 5}.map(square).reduce(0, combine: +) //filterarray = 330
  • 24. Praticamente todos os tipos são tipos de variáveis. Classes são excessão…
  • 25. Um enum pode ser usado como varivel e testado em um switch… enum Result { case Success(AnyObject) case Failure(NSError) } func dividir(x:Int, y:Int) -> Result{ if y<1 { return Result.Failure(NSError(domain: "divide0", code: 1, userInfo: nil)) } return Result.Success(x / y) }
  • 26. let result = dividir(1000, y: 2) switch result { case .Success(let mystuff): let march = mystuff as! Int + 10 // 510 case .Failure(let error): error }
  • 28. Como isso funciona?? não sei, mas funciona assim XD func add(x: Int) ->Int ->Int { return {y in return x + y} } let sum = add(2) // Int -> Int let boom = sum(4) // 6 let things = add(10)(12) // 22