Photo by Leonardo Wong on Unsplash

Fonksiyonlar ile Birleştirilebilir (Composable) Veri Türleri

Composable yani matematiksel olarak birleştirilebilir, üzerinde fonksiyon çalıştırılıp, diğer fonksiyon ile tekrar tekrar kullanabilir anlamında kullanılıyor. Composition işlemleri uygulamanızın esnek ve üzerinde rahat işlem yapabilir hale getirecektir. Aşağıdaki yazı bu tarz veri türlerini nasıl oluşturduğumuz üzerine.

Bu yazı Eric Elliott Composable Software kitabındaki Composable Datatypes with Functions bölümünü anlatmaya çalışacağız.

JavaScript’de birleştirerek, kapsayarak yazılım oluşturmanın en kolay yolu, fonksiyonlardır ve fonksiyonlarında bir obje olması ve method ve özellik eklenmesi aşağıdaki duruma benzer yapılar kurmanızı sağlar.

Aşağıdaki örnekte t bir fonksiyon, fn bir fonksiyon, to string başka bir fonksiyon.

  • t(2) ile bize bir fonksiyon dönen bir fonksiyonu çağırıyoruz.
  • bize fonksiyon dönen fonksiyon aynı zamanda fonksiyona farklı fonksiyonlar ekleyerek onaları kullanabilme imkanı sunuyor (Örn toString gibi)

İlk olarak, bazı kurallar oluşturalım;

Aşağıdaki örnekte t fonksiyonu x+0 matematiksel yaklaşımı x+1 de de yapıyor olabilmek.

  • t(x)(t(0)) ==== t(x)

yukarıda önce t(0) işletilir çıkan sonuç t(x) dönen fonksiyona verilir.

  • t(x)(t(1)) ==== t(x + 1)

aynısı yukarıdaki içinde geçerli önce t(1) işletilir çıkan sonuç t(x) dönen fonksiyona verilir.

Bu durumu JS’de toString görebiliriz.

  • t(x)(t(0)).toString() === t(x).toString()
  • t(x)(t(1)).toString() === t(x + 1).toString()

Bu fonksiyonu t için işlettiğimizde ilk durum için t farklı olduğunu, 2nci durum için toplama işleminin gerçekleşmediğini görebilirsiniz.

Mevcut t fonksiyonu add özelliği yok

Peki bu fonksiyonu nasıl çalışır hale getireceğiz.

  1. t fonksiyonunun döndüğüfn fonksiyonun içerisinde add fonksiyonu eklenir ve bu t(value + n) şeklinde kendisine geçilen n değerini mevcut value ile toplar.
  2. valueOf fonksiyonu t () parametre olarak geçilen n değerini almakta ve toplama yapmak için kullanılır.
  3. Oluşturulan add metodunu fn eklemek için Object.assign() kullanır.
mevcut t fonksiyonuna add özelliğini ekledik.

fonksiyonu bu şekilde işletebilen matematiksel hale getirdiğinizde pipe gibi yapılar ile tüm bu fonksiyonları birbirini kapsayacak ve birleştirilecek halde (composition) yapıları kurabilmemizi imkan tanır.

// Compose functions from top to bottom:
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
// Sugar to kick off the pipeline with an initial value:
const sumT = (...fns) => pipe(...fns)(t(0));sumT(
t(2),
t(4),
t(-1)
).valueOf(); // 5

Bunu Herhangi Bir Veri Türüyle Uygulayabilirsiniz.

Mantıklı bir composition işlemi olduğu sürece verilerinizin hangi yapıda olduğu önemli değildir.

  • List ve Stringler için birleştirme
  • DSP için sinyal toplama

Elbette aynı veriler için birçok farklı işlem anlamlı olabilir. Soru şu ki, kompozisyon kavramını en iyi hangi işlem temsil ediyor? Başka bir deyişle, bu şekilde ifade edilen en çok hangi işlem fayda sağlar?

const result = compose(
value1,
value2,
value3
);

Composable (Birleştirilebilir) Para Birimi

JS Number değerinin tutulma şeklinden kaynaklı 0.1 + 0.2 doları centi topladığımızda istediğimiz rakama ulaşamayız.

Bunu birleştirilebilir bir para birimine dönüştürmek için fonksiyon composition faydalanabiliriz.

import { $ } from 'moneysafe';
$(.1) + $(.2) === $(.3).cents; // true

Bu kütüphaneyi nasıl yazdığı konusunda videosuna aşağıdaki referanslarda bulunan blog yazısından ulaşabilirsiniz.

Aynı zamanda kaynak kodlara https://github.com/ericelliott/moneysafe bu linkten ulaşabilirsiniz.

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