Funktsional dasturlash va uning prinsiplari haqida gapir.
sobes.tech AI
AIdan javob
Funktsional dasturlash (FP) — bu hisoblashlarni matematik funktsiyalarni baholash sifatida ko‘rib chiqadigan va holat o‘zgarishi va o‘zgaruvchan ma’lumotlardan qochadigan dasturlash paradigmasidir.
Asosiy tamoyillar:
-
Toza funktsiyalar: Funktsiya toza deb hisoblanadi, agar:
- U har doim bir xil argumentlar bilan bir xil natijani qaytaradi.
- U yon ta’sirga ega emas (globallashgan holatni o‘zgartirmaydi, kirish/chiqish qilmaydi va hokazo).
<?php // Toza funktsiya function add(int $a, int $b): int { return $a + $b; } // To‘g‘ri bo‘lmagan funktsiya (yon ta’sir — global o‘zgaruvchini o‘zgartiradi) $count = 0; function increment_and_get(): int { global $count; $count++; return $count; } -
Ma’lumotlarning o‘zgarmasligi: Yaratilgandan so‘ng, ma’lumotlar o‘zgartirilmaydi. Mavjud ob’ektni o‘zgartirish o‘rniga, kerakli o‘zgartirishlar bilan yangi ob’ekt yaratiladi.
<?php // O‘zgarmaslik misoli (PHPda bu tilning qat’iy tamoyili emas, lekin uni amalga oshirish mumkin) class ImmutablePoint { private int $x; private int $y; public function __construct(int $x, int $y) { $this->x = $x; $this->y = $y; } public function getX(): int { return $this->x; } public function getY(): int { return $this->y; } // O‘zgartirish o‘rniga, yangi ob’ekt qaytaradi public function move(int $dx, int $dy): self { return new self($this->x + $dx, $this->y + $dy); } } $p1 = new ImmutablePoint(1, 2); $p2 = $p1->move(1, 1); // $p1 (1, 2) qoladi, $p2 (2, 3) bo‘ladi -
Birinchi darajali obyekt sifatida funktsiyalar: Funktsiyalar boshqa funktsiyalarga argument sifatida berilishi, funktsiyalardan qaytarilishi, o‘zgaruvchilarga tayinlanishi mumkin.
<?php // Funktsiyalar o‘zgaruvchilar sifatida $greeter = function(string $name): string { return "Hello, " . $name; }; echo $greeter("World"); // Chiqish: Hello, World // Funktsiyalar argument sifatida function apply_transform(array $data, callable $transform): array { $result = []; foreach ($data as $item) { $result[] = $transform($item); } return $result; } $numbers = [1, 2, 3]; $doubled_numbers = apply_transform($numbers, function(int $n): int { return $n * 2; }); // $doubled_numbers = [2, 4, 6] -
Yon ta’sirlarning yo‘qligi: Hisoblashlar dastur holatiga ta’sir qilmaydi.
-
Deklarativlik: nima hisoblanishi kerakligi bilan shug‘ullanadi, qanday emas.
Afzalliklar:
- Sinov qilish osonroq (toza funktsiyalarni test qilish oson).
- Parallelizatsiyani soddalashtirish (o‘zgaruvchan holatning yo‘qligi sinxronizatsiya muammolarini kamaytiradi).
- Debug qilish osonroq.
- Kodning xatti-harakatlari oldindan aytib bo‘linadi.