5.1 Əsas konseptlər
Ali dərəcəli funksiyalar funksional proqramlaşdırmanın vacib bir aspektidir və JavaScript-də geniş istifadə olunur. Onlar daha abstrakt, kompakt və təkrar istifadəyə yararlı kod yazmağa imkan verir.
Ali dərəcəli funksiyalar nədir?
Ali dərəcəli funksiyalar (higher-order functions) — bunlar, başqa funksiyaları arqument kimi qəbul edən və ya nəticə olaraq funksiyaları qaytaran funksiyalardır. Onlar funksiyaları birinci dərəcə obyektlər kimi istifadə etməyə imkan verir, bu isə daha abstrakt və modullu proqramlar yaradılmasını təmin edir.
Ali dərəcəli funksiyaların nümunələri
- Funksiyaların arqument kimi ötürülməsi.
- Funksiyaların digər funksiyalardan qaytarılması.
5.2 Funksiyaların arqument kimi ötürülməsi
Daxili array metodlarından istifadə
JavaScript array-larla işləmək üçün bir çox daxili metodlar təqdim edir, bunlar yüksək səviyyəli funksiyalardır, məsələn, forEach(), map(), filter(), reduce() və başqaları.
1. forEach() metodu
forEach() metodu müəyyən edilmiş funksiyanı arrayin hər bir elementi üçün bir dəfə icra edir.
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(function(number) {
console.log(number);
});
// Çıxış: 1 2 3 4 5
2. map() metodu
map() metodu hər bir array elementinə tətbiq olunan müəyyən funksiyanın nəticələrindən ibarət yeni array yaradır.
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map(function(number) {
return number * number;
});
console.log(squaredNumbers);
// Çıxış: [1, 4, 9, 16, 25]
3. filter() metodu
filter() metodu ötürülən funksiyada müəyyən edilmiş şərti keçən bütün elementlərlə yeni array yaradır.
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(function(number) {
return number % 2 === 0;
});
console.log(evenNumbers);
// Çıxış: [2, 4]
4. reduce() metodu
reduce() metodu accumulator və arrayin hər bir elementi ilə funksiyanı tətbiq edir (soldan sağa), və bu dəyərləri bir yeganə dəyərə endirir.
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(function(total, number) {
return total + number;
}, 0);
console.log(sum);
// Çıxış: 15
5.3 Digər funksiyaları qaytaran funksiyalar
Yüksək səviyyəli funksiyalar başqa funksiyaları qaytara bilər, bu da daha çevik və konfiqurasiya edilə bilən funksiyalar yaratmağa imkan verir.
1. Currying (Karrinq)
Karrinq — bir neçə arqument qəbul edən funksiyanı, bir arqument qəbul edən və növbəti arqumenti qəbul edən yeni bir funksiya qaytaran formaya çevirmə prosesidir.
Karrinq nümunəsi:
function multiply(a) {
return function(b) {
return a * b;
};
}
const multiplyByTwo = multiply(2);
console.log(multiplyByTwo(5)); // Nəticə: 10
const multiplyByThree = multiply(3);
console.log(multiplyByThree(5)); // Nəticə: 15
2. Konfiqurasiya edilə bilən funksiyaların yaradılması
Yüksək səviyyəli funksiyalar arqumentlər vasitəsilə tənzimlənə bilən funksiyalar yaratmağa imkan verir.
Nümunə:
function createGreeting(greeting) {
return function(name) {
console.log(`${greeting}, ${name}!`);
};
}
const sayHello = createGreeting('Salam');
sayHello('Alice'); // Nəticə: Salam, Alice!
const sayHi = createGreeting('Salam');
sayHi('Bob'); // Nəticə: Salam, Bob!
5.4 Praktiki tətbiq
Yüksək səviyyəli funksiyaların praktiki tətbiqinə baxaq.
compose() funksiyası
compose() funksiyası bir neçə funksiyanı birləşdirərək, onları ardıcıllıqla icra edən tək bir funksiya yaradır:
function compose(...functions) {
return function(initialValue) {
return functions.reduceRight((value, func) => func(value), initialValue);
};
}
const addOne = x => x + 1;
const double = x => x * 2;
const addOneAndDouble = compose(double, addOne);
console.log(addOneAndDouble(5)); // Çap edəcək: 12 (əvvəlcə 5-ə 1 əlavə edir, sonra nəticəni ikiqat artırır)
Asinxron yüksək səviyyəli funksiyalar
Asinxron yüksək səviyyəli funksiyalar API sorğuları və ya timerlərlə iş kimi asinxron əməliyyatlarla işləməyə imkan verir:
function fetchData(callback) {
setTimeout(() => {
callback('Məlumat əldə edildi');
}, 1000);
}
function processData(data) {
console.log(data);
}
fetchData(processData);
// Çap edəcək: Məlumat əldə edildi (1 saniyə sonra)
GO TO FULL VERSION