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.
Bu yazı yorumlara kapalı.