İçeriğe geç

Functional Programing – Applicatives

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

Applicatives paradigması Functor yapısına ek olarak .apply işlemi ile birlikte .map işlemini kullanır. Fark olarak fonksiyon contextleme ve bununla birlikte context olan nesne üzerinde birlikte işlem yapılmasını sağlar.

Aşağıdaki görsel olayı çok güzel bir şekilde açıklamakta.

Bu olayı Swift dilinde gerçekleyelim.

precedencegroup Applicat {
    associativity: left
    lowerThan: AdditionPrecedence
}

infix operator <*>: Applicat

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
        }
    }
    
    func apply<U>(f : Optional<(Wrapped) -> U>) -> Optional<U> {
        switch f {
        case .some(let xx): return self.map(f: xx)
        case .none: return .none
        }
    }
    
    static func <*> <U>(f: Optional<(Wrapped) -> U>, a: Optional<Wrapped>) -> Optional<U> {
        return a.apply(f: f)
    }
}

ilk nesne olarak dediğim gibi Context fonksiyon işlemi ve ardından context value eklendiğimizi örnekte görebilirsiniz.

Optional.some({$0 + 3}) <*> Optional.some(2) // .some(5)

Not: Anlaşılması kolay olmayan konular bu yüzden playground üzerinde kodu çalıştırıp, deneyip görerek anlamanızı tavsiye ederim.

 

Kategori:Functional Programing

Bu yazı yorumlara kapalı.

© 2025 Kenan Atmaca