Function Programming in Swift!

Bài Toán

  • Như đã nói ở bài viết trước hôm nay mình sẽ hướng dẫn các bạn về Function Programming.

//: Playground - noun: a place where people can play

import Foundation

// === MAP ===
// Cach su dung thong thuong
func map(_ value: Int, transform: (Int) -> Int) -> Int {
    return transform(value)
}

map(10) { value in
    return value * value
}

map(10) { (value) -> Int in
    return value / 2
}

// Su dung voi Generics
func map<T>(_ value: T, transform: (T) -> T) -> T {
    return transform(value)
}

map("Viet") { (value) in
    return value + "Nam"
}

// Ap dung vao Array

extension Array {
    func map<T>(_ transform: (Element) -> T) -> [T] {
        var result: [T] = []
        for obj in self {
            result.append(transform(obj))
        }
        return result
    }
}
// Su dung
let arr = [1, 3, 5, 2, 4]

let mapArray = arr.map { (value) in
    return value * value
}
print(mapArray)
// kq: [1, 9, 25, 4, 16]

// === Filter ====
extension Array {
    func filter(_ check: (Element) -> Bool) -> [Element] {
        var result: [Element] = []
        for obj in self where check(obj) {
            result.append(obj)
        }
        return result
    }
}

let filterArray = arr.filter { (value) -> Bool in
    return value % 2 == 0
}
print(filterArray)
// kq: [2, 4]

// === Reduce ===
extension Array {
    func reduce<T>(_ initialValue: T, combine: (T, Element) -> T) -> T {
        var result = initialValue
        for obj in self {
            result = combine(result, obj)
        }
        return result
    }
}

let reduceArray = arr.reduce(0) { (result, value) in
    return result + value
}
print(reduceArray)
// kq: 15

// Bai toan: binh phuong tat ca cac Element trong mang, loc gia tri chan, roi tinh tong tat ca gia tri chan.
let binding = arr
    .map { (value) in
        return value * value
    }.filter { (value) -> Bool in
        return value % 2 == 0
    }.reduce(0) { (result, value) in
        return result + value
}
print(binding)

Kết


Observable, Signal là trái tim của Rx, ReactiveCocoa thì Function Programming là phép thuật của nó, mọi thứ đều hướng tới Observable và Signal với mục đích sử dụng sức mạnh của phép thuật này, ở trên mình trình bày một cách đơn giản cho các bạn mới tiếp cận có cái nhìn cơ bản về fuction programming.

  • Function Reactive Programming RxSwift , Reactive Swift nói theo cách đơn giản: chỉ có thế , Try and Try!.