JS ILE FONKSIYONEL PROGRAMLAMA
Lenses
Fonksiyonel Programlamada Object, Array vb veri yapıları üzerindeki belli alanda işlem yapmanızı sağlayan set, get(view), ve over fonksiyonları ile bu işlemleri soyutlayarak ortak davranışlara dönüştüren yaklaşımdır.
--
Normalde basit bir obje ile çalıştığımızı düşünelim. Aşağıdaki örnekte olduğu gibi.
const obj= {a:1, b:2, c:3}
bu objenin b elemanını okumak veya bunun üzerine bir şeyler yazıp değiştirmek istediğimizde get ve set fonksiyonlarına ihtiyaç duyarız.
//get işlemini
const bVal=obj.b
//set islemini
const obj[b]=5
peki bunu property bazında nasıl fonksiyon haline getirebiliriz.
const getB=(obj)=>obj[b];
const setB=(obj,val)=>obj[b]=val;
bunu daha genel nasıl yazabiliriz.
const view=(obj, prop)=>obj[prop];
const set=(obj, prop, val)= obj[prop]=val
Tabi ben burada bu işlemi oldukça basit anlamda soyut hale getirdim. Ramda kütüphanesi içerisinde lens konusu daha detaylı anlatılıyor. Ve konuyu bunun üzerinden anlatmanın daha doğru olacağını düşünüyorum.
Aşağıda gördüğünüz gibi view, set ve over fonksiyonları bulunuyor. Bunlar lens üzerinde işlem yaptığı fonksiyonlar.
- view → okuma
- set → yazma
- over → önce okuyup, üzerinde bir fonksiyon çalıştırıp sonra üzerine yazma işlemi yapıyor.
Tabi birde R.lens fonksiyonu bulunuyor. Bu da objenin hangi alanı üzerinde çalışacağını belirtiyor.
Soyutlama işleminin fonksiyonlar ile ne kadar başarılı bir şekilde yapıldığını görebilirsiniz. x prop üzerinde view, set ve over işlemleri çalıştırılıyor.
Lensleri Farklı Şekillerde Tanımlama
LensIndex
Örneğin ben indeks üzerinden bir tanımlama yapmak istiyorum. Aşağıdaki örnek array birinci indeksi üzerinde çalışmasını belirtiyor.
LensProp
Aşağıdaki örnek objenin tanımlanmış bir property üzerinde çalışmayı belirtiyor. Aşağıdaki örnek x property üzerinde çalışmaya odaklanıyor.
LensPath
Daha kompleks obje türlerinde örneğin x property array ve bu arrayin elemanları bulunuyor. Bizde x arrayindeki 0 elemanın y özelliği ile ilgileniyoruz. Bu durumlar için lensPath kullanmalıyız.
Lensler Functor özelliği ile Map Yapıları Üzerinde Çalışır.
Daha önceki yazılarda Functor bahsetmiştim. Daha önceden okumamış olanlar Functors ve Categories blog yazısını okuyabilirler.
Aşağıdaki örnekte elimizde bir array bulunuyor. Biz amount değerini başka bir currency değeri ile değiştirmek istiyoruz.
Bu durumda R.over lens işlemini bir değişkene atayıp map fonsiyonu içerisinde tüm objeler bunun uygulanmasını sağlayabiliriz.
Özet
Lensler de görüleceği üzere amaç set, get ve over ile objenin şeklini veya yapısında bir takım değişiklikleri daha kontrollü ve soyutlayarak gerçekleştirmek
Referanslar
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.