İçeriğe geç

Functional Programing – Applicatives 2

Merhabalar bu yazımda bir önceki Applicatives yazıma ek olarak güzel bir örnek paylaşacağım.

Bu yapılar fonksiyonel programlama ile yazılım dünyasına girmiş ve geliştirilmiştir. Bu yapıyı bir önceki yazımda açıklamış olsamda olay yapılacak işlem ve ardından eklenecekler olarak düşünebiliriz. İlk contextlenen fonksiyon işlemin ne olacağını belirler ardından ona bağlanacak nesnelerde üzerine eklenir. Bu kurgu ile birlikte Nesne yönelimli işlemler beraber yapılabilir.

Aşağıdaki örnekte basit ama oldukça anlaşılır bir örneği sizlerle paylaşacağım.

precedencegroup Applicat {
    associativity: left
    lowerThan: AdditionPrecedence
}

infix operator <*>: Applicat

func <*> <A,B>(f: ((A) -> B)?, x: A?) -> B? {
    guard let f = f, let x = x else { return nil }
    return f(x)
}

func pure<A>(_ x:A) -> A? {
    return .some(x)
}

struct User {
    let id: Int
    let name: String
    let mail: String
}

let createUser = {id in {mail in {name in User(id: id, name: name, mail: mail)}}}

let user = pure(createUser) <*> 2019 <*> "mail.kenanatmaca@gmail.com" <*> "Kenan Atmaca"

Bu örnekte createUser adlı ard arda fonksiyon dönen bir yapı var. Yazılan bu pure generics yapıda ve içine aldığı fonksiyonu işleme sokuyor. <*> (Haskell dilinde Applicative işlemini gerçekleştirmekte) operatörüde üzerine eklendiğinde parametre olarak eklenerek User nesnesini döndürüyor. Dikkat ederseniz burdaki yapıda bir önceki yapı ile aynı.

Tarih:Functional Programing

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca