Javascript
te fonksiyonlar first-class object
lerdir. Yani diğer bir deyişle fonksiyonlar object
tipindedir ve tipi object
olanlar gibi (String
, Array
, Number
) kullanılabilirler. Bu yüzden fonksiyonlar değişkende saklanabilir, başka bir fonksiyona argüman olarak verilebilirler, başka bir fonksiyonun içinde oluşturulabilir yada o fonksiyonun geri dönüş değeri olabilirler.
Javascript
teki callback
fonksiyonlarının çalışma mantığının altında da yukarıda bahsettiğim fonksiyonlara geri dönüş değeri olarak bu fonksiyonları verebiliyor olmamız yatar.
Callback
fonksiyonları, fonksiyonel programlama olarak bilinen bir programlama paradigmasından ortaya çıkmıştır. Temel düzeyde fonksiyonel programlama da, fonksiyonların diğer fonksiyonlara argüman olarak verilmesi prensibini benimser.
Fonksiyonel programlama, -ve yine de günümüzde daha az ölçüde olsa da- eski zamanlarda; özel olarak eğitilmiş usta programcıların gizli bir tekniği olarak görülüyordu.
Neyse ki fonksiyonel programlama teknikleri açıklandı da bütün insanlık işin büyüsünü artık kolaylıkla anlayabilir hale geldi.
Fonksiyonel programlamanın temel tekniklerinden biri callback
işlevidir. Aşağıda anlatacağım callback
fonksiyonlarının tekniği bu kadar basit olmasına rağmen neden hala ileri seviye javascript konularında anlatılmaya devam ediyor anlamıyorum.
Callback yada High-Order Function Nedir?
Genelde high-order function
olarak bilinen callback
fonksiyonları başka bir fonksiyona (ki buna otherFunction
diyelim) parametre olarak iletilen bir fonksiyondur. Ve callback
fonksiyonu otherFunction
un içinden çağrılır. Callback
fonksiyonları aslında (ortak bir sorunu çözmek için ortaya çıkan) bir pattern
dir ve bu nedenle callback
fonksiyonları callback pattern
olarak da bilinir.
Basit bir callback
fonksiyonu javascript click event
ine verdiğimiz bir fonksiyondan ibarettir. Örnekle açıklayalım. (Bu örneği daha basit bir mantıkla çalıştığı için jquery
de gösteriyorum)
Yukarıdaki örnekte gördüğümüz gibi click
fonksiyonuna argüman olarak bir fonksiyon veririz. Ve click
fonksiyonu ona gönderilen fonksiyonu çağırır(yada yürütür). Bu örnek JQuery
de sıklıkla kullanılır ve insanların çoğu bunun callback
fonksiyonu olduğunu bilmeden kullanmaya devam ederler.
Başka bir örnek ile gösterecek olursak;
Yukarıda yine ayni şekilde forEach
fonksiyonuna nasıl fonksiyon verdiğimize dikkat edin. Şu ana kadar fonksiyonların içine verdiğimiz fonksiyonlar hep anonymous function
lardı yani isimsiz fonksiyonlar. Kendi callback
fonksiyonlarımızı yazmaya başlamadan önce callback
leri iyice anladığımızdan emin olalım.
Callback fonksiyonları nasıl çalışır?
Fonksiyonları değişkenler gibi diğer fonksiyonlara aktarabilir ve bu aktardığınız fonksiyonları da bir başka fonksiyona aktarıp kullanabilirsiniz. Bir callback
fonksiyonunu bir fonksiyona argüman olarak verdiğimizde yalnızca fonksiyon aktarılır. Fonksiyonlar parametrede çalıştırılmaz. Ve callback
gönderdiğimiz fonksiyon callback
fonksiyonuna sahip olduğu için callback
işlemini istediği zaman yapabilir.
Callback fonksiyonlarının uygulanması sırasındaki temel ilkeler
Çok komplike olmayan callback
fonksiyonlarını kullanırken aşina olmamız gereken bazı dikkat çekici ilkeler bulunuyor.
İsimli yada İsimsiz Fonksiyonları Callback olarak kullanın
Callback
ler ilk örneğimizde (JQuery ile yazılmış olan) olduğu gibi fonksiyonun parametresinde isimsiz fonksiyon olarak tanımlanabiliyordu. Bu, callback
fonksiyonlarını kullanmanın en yaygın modelidir. Diğer popüler olan yöntem isimlendirilmiş bir fonksiyon tanımlayıp bu fonksiyonun adını parametreye vermektir. Aşağıda bir örnek ile açıklayalım.
Callback fonksiyonlarına bulunduğu fonksiyonun parametrelerini geçirme
Callback
fonksiyonu çalıştırıldığı zaman normal fonksiyon gibi davrandığından ona bulunduğu fonksiyondaki parametreleri yada fonksiyondaki değişkenleri gönderebiliriz. Üstteki örnekte de signCoder
fonksiyonunda bulunan parametreyi callback
fonksiyonuna gönderiyoruz. Şimdi bu örnekte hem parametre hemde global bir değişkeni callback
fonksiyonumuzla iletelim.
Gönderilen fonksiyonun callback fonksiyonu olduğunu kontrol etme
Parametre ile gönderilen fonksiyonları aldığımızda bunların fonksiyon tipinde olduğunu kontrol etmemiz bizim yararımıza olacaktır.
Ayrıca callback
fonksiyonlarını option
yapmak ilerde karşılaşacağımız bazı problemlerin önüne geçecektir. Bunun için basit bir örnek yapalım.
Eğer callback bir fonksiyon değilse javascript
te RunTimeException
hatası alırsınız.
Callback
leri anlatmaya devam edeceğim fakat konumuz anlamaya çalışmak olduğu için buraya kadar callback
leri anladığınızı düşünüyorum.
Eğer anlamadığınız bir yer var ise alt kısımdaki disqus’a yorum yapabilirsiniz.
İçerikte herhangi bir eksiklik veyahut yanlış olduğunu düşündüğünüz bir kısım var ise mail atmaktan çekinmeyin.