Photo by Ignacio Correia 🔴 on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Lenses

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.

https://youtu.be/AYyMGdxgCTY?t=1294

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.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store