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
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
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