Sobes.tech
Middle

Функционалдуу программалоо жана анын принциптери жөнүндө сүйлө.

sobes.tech AI

AIден жооп

Функционалдык программалоо (ФП) — бул программалоонун парадигмасы, ал эсептөөлөрдү математикалык функциялардын эсептөөлөрү катары карайт, абалды жана өзгөрмө маалыматтарды өзгөртүүдөн качат.

Негизги принциптер:

  • Таза функциялар: Функция таза деп саналат, эгер:

    • ал дайыма бирдей натыйжаны кайтарат, эгер аргументтер бирдей болсо;
    • ал жактан көз каранды эффекттери жок (глобалдык абалды өзгөртпөйт, киргизүү/чыгаруу жасабайт ж.б.).
    <?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]
    
  • Кошумчалуу эффекттердин жоктугу: эсептөөлөр алардын чегинен тышкары программанын абалына таасир этпейт.

  • Декларативдүү: көңүл буруу эчтек эсептөө керек экенине, кантип эмес.

Артыкчылыктары:

  • Тестирлөө мүмкүнчүлүгүн жакшыртуу (таза функцияларды оңой тестирлөө мүмкүн)
  • Параллелизмди жөнөкөйлөтүү (өзгөрмө абалдын жоктугу синхрондоштуруунун көйгөйлөрүн азайтат)
  • Жакшы дебаггинг
  • Коддун алдын ала болжау мүмкүнчүлүгү.