İçeriğe geç

Functional Programing – Functors

Merhabalar bu yazımda fonksiyonel programlama içerisinde bulunan Functor paradigması hakkında bilgi verip Swift ile örnek yapacağız.

Normal fonksiyonel olarak yazdığımız bir kodda örneğin:

func summ(x:Int, y:Int) -> Int {
    return x + y
}

summ(x: 5, y: 2) // 7

Burada basit bir toplama işleminde değişkenlerin referansları değiştirilebilir ve kontrol edilebilinir. Ancak functor yapısında durum biraz bundan farklı. Örnek olarak her sayı bir kutunun içine alınarak (Context), fonksiyonel programlama mantığına uygun şekilde değiştirilmesi ve referansına müdahale edilmesi kontrol altına alınmış olur.

Bu yapıya uygun olarak aşağıdaki enum yapısını oluşturabiliriz.

enum Optional<Wrapped> {
    case none
    case some(Wrapped)
}

Optional.some(2) nesnesi kutunun içindeki sayı olarak düşünebiliriz. Bu sayı dışardan gelen +3 sayısı ile toplanamaz. Bunun için map işlemi yaparak sayıları toplayabiliriz ve ardından tekrar kutunun içine koyarız.

enum Optional<Wrapped> {
    case none
    case some(Wrapped)
    
    func map<U>(f: (Wrapped) -> U) -> Optional<U> {
        switch self {
        case .some(let x): return .some(f(x))
        case .none: return .none
        }
    }
}

Optional.some(2).map {$0 + 3} // .some(5)

Functor yapısı map fonksiyonunun nası davranacağını ve hangi yapıyı döndüreceğini tanımlayan bir türdür diyebiliriz. Bu fonksiyon Haskell dilinde (fmap) fonksiyonuna karşılık gelir. Gördüğünüz gibi fonksiyonel programlama yapısında tüm işlemleri fonksiyonlar yardımı ile kurgular ve yaparız.

 

 

 

Kategori:Functional Programing

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca