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