Yüksek dereceli fonksiyon
- İngilizcesi
- Higher-Order Function
- Türkçe karşılığı
- üst düzey fonksiyon, yüksek mertebeden fonksiyon
- Okunuşu
- hayır ordır fankşın
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Yüksek dereceli fonksiyon, başka bir fonksiyonu argüman olarak alan, fonksiyon döndüren ya da ikisini de yapan fonksiyondur; davranış veri gibi taşınabilir.
Yüksek dereceli fonksiyon (higher-order function) nedir?
Yüksek dereceli fonksiyon, diğer fonksiyonlarla değer olarak çalışan her fonksiyondur: parametre olarak bir fonksiyon kabul eder, yeni bir fonksiyon döndürür ya da her ikisini yapar. Bu, fonksiyonların birinci sınıf değer olduğu, yani sayılar veya dizeler gibi değişkenlerde saklanabildiği, argüman olarak aktarılabildiği ve döndürülebildiği dillerde mümkündür. JavaScript, Python, Kotlin, Swift, Rust ve neredeyse tüm diğer modern diller bunu destekler.
En bilinen örnekler map, filter ve reduce gibi dizi yardımcılarıdır. Her biri döngüyü sizin yerinize halleder ve yalnızca her öğeye ne yapılacağını anlatan küçük bir fonksiyon ister: nasıl dönüştürüleceği, tutulup tutulmayacağı ya da nasıl birleştirileceği. Fonksiyon döndüren fonksiyonlar da yaygındır; örneğin fn'in her çağrıyı günlüğe yazan bir sürümünü döndüren bir withLogging(fn) sarmalayıcısı ya da özelleştirilmiş doğrulayıcılar üreten bir fabrika gibi.
Yüksek dereceli fonksiyon, değiştirilebilir bıçaklara sahip bir mutfak robotu gibidir: makine motoru ve kabı sağlar, taktığınız bıçak ise dilimleyip, rendeleyip ya da karıştıracağına karar verir. Bu, kodu daha kısa ve yeniden kullanılabilir yapar; çünkü genel mekanizma bir kez yazılır ve yalnızca değişen kısım dışarıdan verilir.
Yüksek dereceli fonksiyonlar sıklıkla callback'lerle karıştırılır. Callback, aktarılan fonksiyondur; yüksek dereceli fonksiyon ise onu alan fonksiyondur. Dolayısıyla items.map(double) örneğinde map metodu yüksek dereceli, double ise callback'tir. Yüksek dereceli bir fonksiyondan döndürülen fonksiyonlar genellikle closure'dır, çünkü onları oluşturan fonksiyonun değişkenlerini hatırlarlar.
Önemli noktalar
- Yüksek dereceli fonksiyon, girdi olarak bir fonksiyon alır, bir fonksiyon döndürür ya da her ikisini yapar.
- Birinci sınıf fonksiyonlar gerektirir; çoğu modern dil bunları destekler.
map,filtervereduceklasik örneklerdir.- Aktarılan fonksiyon callback, onu alan fonksiyon ise yüksek derecelidir.
Örnek
const prices = [12, 45, 7, 30];
// filter and map are higher-order: they take functions as arguments
const doubled = prices
.filter((p) => p > 10)
.map((p) => p * 2);
// A higher-order function that returns a new function
function multiplier(factor) {
return (n) => n * factor;
}
const triple = multiplier(3);
console.log(doubled, triple(5)); // [24, 90, 60] 15Sık sorulan sorular
Callback bir yüksek dereceli fonksiyon mudur?
Genellikle hayır. Callback aktarılan fonksiyondur, onu kabul eden fonksiyon ise yüksek derecelidir. Bir callback ancak kendisi de fonksiyon alıyor veya döndürüyorsa yüksek derecelidir.
Hangi diller yüksek dereceli fonksiyonları destekler?
JavaScript, TypeScript, Python, Kotlin, Swift, C#, Rust, Go ve tüm fonksiyonel diller dahil birinci sınıf fonksiyonlara sahip her dil. Java bu desteği Java 8'de lambda'lar ve fonksiyonel interface'ler aracılığıyla ekledi.
Döngüler yerine neden yüksek dereceli fonksiyonlar kullanılır?
Tekrarlayan döngü kodunu gizler ve her öğeye ne yapılacağını anlatmanıza olanak tanır; bu da çoğu zaman daha kısa ve okunması daha kolaydır. Düz döngüler yine de uygundur ve mantığın çok adımı olduğu ya da erken durması gerektiği durumlarda bazen daha açıktır.
İlgili sayfalar
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- CallbackProgramlamanın Temelleri, s. 5Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
- ClosureProgramlamanın Temelleri, s. 6Closure, oluşturulduğu kapsamdaki değişkenleri hatırlayan bir fonksiyondur; dıştaki fonksiyon sona erdikten sonra bile bu değişkenleri kullanabilir.
- Fonksiyonel programlamaProgramlamanın Temelleri, s. 21Fonksiyonel programlama, paylaşılan verileri değiştirmeyen saf fonksiyonlarla yazılım kurma stilidir; kodu daha öngörülebilir ve test etmesi kolay yapar.
- Lambda fonksiyonuProgramlamanın Temelleri, s. 36Lambda fonksiyonu, adı olmadan satır içinde yazılan küçük fonksiyondur; genellikle sıralama ya da filtreleme yapan başka bir fonksiyona doğrudan aktarılır.
- DiziProgramlamanın Temelleri, s. 15Dizi, tek bir ad altında saklanan ve her öğesine genellikle 0'dan başlayan indeks adlı sayısal konumuyla erişilen, sıralı bir değerler koleksiyonudur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin