JavaScript Pure Functions. Sof va Ishonchli Kod Yozish
JavaScript-da Pure Functions (Sof Funksiyalar) haqida keng qamrovli qo'llanma, misollar va amaliy mashqlar bilan
So'nggi yangilanish: 2024-12-26Bugun biz funksional dasturlashning muhim tushunchalaridan biri - Pure Functions (Sof Funksiyalar) haqida chuqur o'rganamiz. Pure functions bizga aniq, ishonchli va sinovdan o'tkazish oson bo'lgan kod yozish imkonini beradi.
Pure Function nima?
Pure function (sof funksiya) - bu quyidagi xususiyatlarga ega bo'lgan funksiya:
- Bir xil kirish (input) uchun har doim bir xil natija qaytaradi.
- Tashqi holatni o'zgartirmaydi (ya'ni, side effect - yon ta'sirlarga ega emas).
- Faqat o'ziga berilgan argumentlarga bog'liq.
Keling, bu tushunchani misollar bilan ko'rib chiqaylik.
Pure Function Misollari
Pure Function
function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // 5
console.log(add(2, 3)); // 5
Bu funksiya pure, chunki:
- Bir xil kirish uchun har doim bir xil natija qaytaradi.
- Hech qanday tashqi o'zgaruvchilarni o'zgartirmaydi.
- Faqat o'ziga berilgan argumentlarga bog'liq.
Impure Function
let total = 0;
function addToTotal(value) {
total += value;
return total;
}
console.log(addToTotal(5)); // 5
console.log(addToTotal(5)); // 10
Bu funksiya impure (sof emas), chunki:
- Bir xil kirish uchun har safar turli natija qaytaradi.
- Tashqi
total
o'zgaruvchisini o'zgartiradi.
Pure Functions-ning Afzalliklari
- Bashorat qilish mumkin: Bir xil kirish uchun har doim bir xil natija.
- Sinovdan o'tkazish oson: Tashqi holatga bog'liq emas, shuning uchun sinovdan o'tkazish osonroq.
- Parallel hisoblash: Side effect-larga ega bo'lmagani uchun parallel ravishda bajarish mumkin.
- Keshlashtirish: Natijalarni keshlashtirish orqali ishlash tezligini oshirish mumkin.
- Tushunarli kod: Funksiyaning vazifasi aniq va tushunarli bo'ladi.
Pure Functions-ni Qo'llash
Massivlarni Qayta Ishlash
// Pure function
function doubleNumbers(numbers) {
return numbers.map(num => num * 2);
}
const numbers = [1, 2, 3, 4];
console.log(doubleNumbers(numbers)); // [2, 4, 6, 8]
console.log(numbers); // [1, 2, 3, 4] - asl massiv o'zgarmadi
Obyektlarni Nusxalash va O'zgartirish
// Pure function
function updateUser(user, updates) {
return { ...user, ...updates };
}
const user = { name: "Ali", age: 30 };
const updatedUser = updateUser(user, { age: 31 });
console.log(user); // { name: "Ali", age: 30 }
console.log(updatedUser); // { name: "Ali", age: 31 }
Pure Functions va Immutability
Pure functions ko'pincha immutable (o'zgarmas) ma'lumotlar bilan ishlaydi. Bu degani, mavjud ma'lumotlarni o'zgartirish o'rniga, yangi ma'lumotlar yaratiladi.
// Pure function with immutability
function addItem(arr, item) {
return [...arr, item];
}
const fruits = ["olma", "banan"];
const newFruits = addItem(fruits, "apelsin");
console.log(fruits); // ["olma", "banan"]
console.log(newFruits); // ["olma", "banan", "apelsin"]
Amaliy Misol: Savat Jami
Keling, pure functions yordamida savat jami hisoblaydigan tizim yarataylik:
// Pure functions
function calculateItemTotal(item) {
return item.price * item.quantity;
}
function calculateSubtotal(items) {
return items.reduce((total, item) => total + calculateItemTotal(item), 0);
}
function calculateTax(subtotal, taxRate) {
return subtotal * taxRate;
}
function calculateTotal(subtotal, tax) {
return subtotal + tax;
}
// Usage
const cart = [
{ name: "Kitob", price: 20, quantity: 2 },
{ name: "Qalam", price: 1, quantity: 5 },
{ name: "Daftar", price: 3, quantity: 3 }
];
const taxRate = 0.08;
const subtotal = calculateSubtotal(cart);
const tax = calculateTax(subtotal, taxRate);
const total = calculateTotal(subtotal, tax);
console.log(`Jami: $${subtotal.toFixed(2)}`);
console.log(`Soliq: $${tax.toFixed(2)}`);
console.log(`Umumiy summa: $${total.toFixed(2)}`);
Bu misolda barcha funksiyalar pure. Ular faqat o'zlariga berilgan argumentlarga asoslanib ishlaydi va hech qanday tashqi holatni o'zgartirmaydi.
Tez-tez So'raladigan Savollar (TSS)
- S: Pure function va impure function o'rtasidagi asosiy farq nima? J: Pure function bir xil kirish uchun har doim bir xil natija qaytaradi va tashqi holatni o'zgartirmaydi. Impure function esa tashqi holatga ta'sir qilishi yoki bir xil kirish uchun turli natijalar qaytarishi mumkin.
- S: Pure functions-dan foydalanishning qanday afzalliklari bor? J: Pure functions kodning ishonchliligini oshiradi, sinovdan o'tkazishni osonlashtiradi, parallel hisoblashga imkon beradi va kodni tushunish va saqlashni osonlashtiradi.
- S: Pure function ichida console.log() ishlatish mumkinmi?
J: Texnik jihatdan,
console.log()
side effect hisoblanadi. Ammo amalda, ko'p dasturchilar debugging maqsadida pure function ichidaconsole.log()
ishlatishni qabul qilishadi, chunki bu funksiyaning asosiy vazifasiga ta'sir qilmaydi. - S: Pure functions va immutability o'rtasida qanday bog'liqlik bor? J: Pure functions ko'pincha immutable ma'lumotlar bilan ishlaydi. Ular mavjud ma'lumotlarni o'zgartirish o'rniga, yangi ma'lumotlar yaratadi. Bu side effect-lardan qochish va kodning bashorat qilinishini ta'minlashga yordam beradi.
- S: Barcha funksiyalarni pure qilib yozish kerakmi? J: Yo'q, bu har doim ham mumkin yoki maqsadga muvofiq emas. Ba'zi operatsiyalar, masalan ma'lumotlar bazasiga yozish yoki foydalanuvchi interfeysini yangilash, tabiatdan impure. Maqsad pure functions-dan imkon qadar ko'proq foydalanish, ayniqsa biznes mantiqida.
- S: Pure functions qanday sinovdan o'tkaziladi? J: Pure functions-ni sinovdan o'tkazish oson, chunki ular faqat o'z argumentlariga bog'liq. Siz turli xil kirishlar uchun kutilgan natijalarni tekshirishingiz mumkin, va bu natijalar har doim bir xil bo'lishi kerak.
- S: Pure function ichida boshqa funksiyani chaqirish mumkinmi? J: Ha, agar chaqirilgan funksiya ham pure bo'lsa. Agar chaqirilgan funksiya impure bo'lsa, u holda butun funksiya impure bo'lib qoladi.
- S: Pure functions va functional programming o'rtasida qanday bog'liqlik bor? J: Pure functions functional programming paradigmasining asosiy tushunchalaridan biridir. Functional programming pure functions, immutability va deklarativ kod yozish tamoyillariga asoslanadi.
- S: Pure functions-dan foydalanish dastur ishlashiga qanday ta'sir qiladi? J: Pure functions ko'pincha dastur ishlashini yaxshilaydi, chunki ularni osonlik bilan keshlashtirish, parallellashtirish va optimallash mumkin. Biroq, ba'zi hollarda, ayniqsa katta miqdordagi immutable ma'lumotlar bilan ishlashda, xotiradan foydalanish ortishi mumkin.
- S: Real loyihalarda pure va impure functions qanday muvozanatlanadi? J: Ko'p dasturchilar "core" yoki "business logic" qismlarini iloji boricha pure functions bilan yozishga harakat qilishadi. Impure operatsiyalar (masalan, ma'lumotlar bazasi yoki UI bilan ishlash) odatda dasturning chekkasida, maxsus ajratilgan qatlamlarda amalga oshiriladi.
Xulosa
Pure functions - bu aniq, ishonchli va sinovdan o'tkazish oson bo'lgan kod yozishning kuchli vositasi. Ular functional programming paradigmasining asosiy qismi bo'lib, JavaScript-da yuqori sifatli dasturlar yaratishda muhim rol o'ynaydi. Pure functions-dan to'g'ri foydalanish orqali siz yanada saqlanishi oson, kengaytiriladigan va xatolardan xoli kod yozishingiz mumkin.
Pure functions tamoyillarini o'zlashtirish va ularni amalda qo'llash orqali siz o'z JavaScript kodingizning sifatini sezilarli darajada oshirishingiz mumkin. Bu nafaqat individual funksiyalar darajasida, balki butun dastur arxitekturasi darajasida ham foydali bo'ladi.