Sobes.tech
Middle

Дар бораи барномасозии функсионалӣ ва принсипҳои он гап зан.

sobes.tech AI

Ҷавоб аз AI

Фарҳанги барномасозии функсионалӣ (FP) парадигмаи барномасозист, ки ҳисобҳоро ҳамчун ҳисобҳои функсияҳои математикӣ баррасӣ мекунад, аз тағйир додани ҳолат ва маълумоти тағйирпазир парҳез мекунад.

Принсипҳои асосӣ:

  • Функсияҳои тоза: Функсия тоза ҳисобида мешавад, агар:

    • Ҳамеша натиҷаи якхела баргардонад дар ҳоле ки аргументҳои якхела бошанд.
    • Вай таъсири тараф надошта бошад (ҳолати глобалиро тағйир надода, воридот/баромадро иҷро накунад ва ғ.).
    <?php
    // Функсияи тоза
    function add(int $a, int $b): int {
        return $a + $b;
    }
    
    // Функсияи нозоиш (таъсири тараф дорад - тағйир додани тағйирёбандаи глобалӣ)
    $count = 0;
    function increment_and_get(): int {
        global $count;
        $count++;
        return $count;
    }
    
  • Намудани маълумот: Пас аз эҷод, маълумотҳо тағйирнопазир мешаванд. Ба ҷои тағйир додани объекти мавҷуда, нав бо тағйиротҳои лозим эҷод мешавад.

    <?php
    // Мисол аз намоиши тағйирнопазирӣ (дар PHP ин принсипи қатъӣ нест, аммо имконпазир аст)
    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;
        }
    
        // Ба ҷои тағйир додан, объект нав меорем
        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), $p2 мешавад (2, 3)
    
  • Функсияҳо ҳамчун объекти дараҷаи аввал: Функсияҳоро метавон ҳамчун аргумент ба дигар функсияҳо супорид, аз функсияҳо баргардонида, ба тағйирёбандаҳо таъин кард.

    <?php
    // Функсияҳо ҳамчун тағйирёбандаҳо
    $greeter = function(string $name): string {
        return "Hello, " . $name;
    };
    
    echo $greeter("World"); // Натиҷа: Hello, World
    
    // Функсияҳо ҳамчун аргументҳо
    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]
    
  • Беаҳамиятии таъсири тараф: Ҳисобҳо ба ҳолати барнома берун аз доираи онҳо таъсир намерасонанд.

  • Декларатив: Тамаркуз ба чӣ бояд ҳисоб карда шавад, на чӣ гуна.

Манфиатҳо:

  • Беҳтар шудани тестсозӣ (функсияҳои тоза осонтар тест карда мешаванд).
  • Осон кардани параллелизм (набудани ҳолати тағйирёбанда мушкилоти ҳамоҳангсозиро кам мекунад).
  • Беҳтар кардани дебаггинг.
  • Пешгӯишпазирии бештар дар рафтори коди.