Photo by rigel on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Yazılımda Fonksiyonel Düşünmek -(High Order Functions)

Örnek bir yazılımı fonksiyonel olarak geliştirerek. Mevcut programlama paradigmamızdan ne gibi farklar olduğunu analiz edelim. Bu yazıda High Order Functions bahsedeceğim

--

Bu yazıyı daha önceden yazmış olduğum JS ile Fonksiyonel Programlama yazısının bir devamı olarak yazıyorum. Bir çok kavramı tek bir yazıda ele almanın yaratacağı karmaşıklıktan kaçmak için bu şekilde bir yönteme başvurdum.

Procedural, Fonksiyonel veya Nesne Tabanlı programlada her zaman amacımız ortak mantıkları soyutlaştırmak ve bunları belli soyutlamalar içerisinde tutarak tekrar tekrar kodlamamaktır. Bu sayede hem daha az satır kod yazılmış olur hem de logic bir kapsam içerisinde toplanmış olur.

High Order Functions fonksiyonların davranışlarındaki ortak örüntüleri bir üst fonksiyona taşımanıza yardımdı olan bir yöntemdir. Arrow Functions yazısından alıntıdır

Argümanlarında 1 yada 1 den fazla function referansını parametre olarak alan veya return değerini geriye fonksiyon olarak dönen fonksiyonlara High Order Functions denir.

Çok yakından tanıdığımız Array sıkça kullandığımız aşağıdaki fonksiyonların hep bu türde fonksiyonlardır.

[].forEach (e=> …) //iterate every elements
[].find(e=>…) //return an element according to condition
[].findIndex(e=>…) //return an element index according condition
[].filter(e=>…) return items according to condition
[].sort(e=>…) sorts according to given condition
[].map(e=>…) transform existing array to other array
[].reduce(e=>…) combines elements and return an element
[].some(e=>…) check some elements
[].every(e=>…)

Döngü (Loop) İşlemlerinde Herkes Tarafından Çok Kullanılan Mantıkları Belli Fonksiyonlarda Toplama

JS’de Döngüler(Loops) ve For..of yöntemi yazımda döngülerin nasıl kullanıldığından biraz bahsetmiştim ve array bu kullanımın detaylarını fonksiyonel programlama kapsamında anlatacağımı söylemiştim. Şimdi sırası :)

forEach → myEach

Procedural Programlamada
For döngüsündeki tüm elemanlara ulaşıp bunlar üzerinde işlem yapmak istiyorsanız. for döngüsünü kodun her kısmında dönmeniz gerekir

const arr=['red','green','blue'];
for(let i=0;i<arr.length;i++){
console.log(arr[i]);
}

Fonksiyonel Programlamada
for döngüsünü myEach fonksiyonu içerisine encapsulate ediyoruz. Bu sayede sürekli tüm elemanlarını dönecek kodları heryerde yazmamıza gerek kalmadı.

Array.prototype.myEach=function(fn){
for(let i=0;i<this.length;i++){
fn(this[i])
}
}
arr.myEach(el=>console.log(el));

diğer filter, find, findIndex, sort, map, reduce, some, every hepside yukarıdaki forEach benzeri. Tek bir mantığı işletiyor ve soyutluyor. Sizin sadece yapmanız gerek filtrelemeyi sağlayan logic vermeniz. Tek tek dönme işlemini ve bunun filtreye uyup uymadığını anlama ve bunu array ekleme işini abstract(soyut) hale getirdiğimiz fonksiyon sağlayacak.

Sabit İşi Yapan Template Fonksiyon Oluşturma

Örneğin verilen sayıyı 5 ve 10 ile toplayan 2 tane fonksiyon yapmak isteyelim

Procedural Programlamada

Procedural programlamada her bir Adder fonksiyonu için toplama işlemi dağıttığımızı görebilirsiniz.

const fiveAdder(x){return x+5;}
const tenAdder(x){return x+10;}
console.log(fiveAdder(7)); //12
console.log(fiveAdder(12)); //22

Fonksiyonel Programlamada

Bu tip fonksiyon toplama işlemini template dönüştürmek için High Order Functions kullanabilirsiniz. Toplama işlemi içinde makeAdder şeklinde bir fonksiyon yazmamız yeterli.

makeAdder=(x)=>(y)=>x+y;
const fiveAdder=makeAdder(5);
const tenAdder=makeAdder(10);

console.log(fiveAdder(7)); //12
console.log(tenAdder(12)); //22

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--