Sobes.tech
Middle

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.