Функционалдуу программалоо жана анын принциптери жөнүндө сүйлө.
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] -
Кошумчалуу эффекттердин жоктугу: эсептөөлөр алардын чегинен тышкары программанын абалына таасир этпейт.
-
Декларативдүү: көңүл буруу эчтек эсептөө керек экенине, кантип эмес.
Артыкчылыктары:
- Тестирлөө мүмкүнчүлүгүн жакшыртуу (таза функцияларды оңой тестирлөө мүмкүн)
- Параллелизмди жөнөкөйлөтүү (өзгөрмө абалдын жоктугу синхрондоштуруунун көйгөйлөрүн азайтат)
- Жакшы дебаггинг
- Коддун алдын ала болжау мүмкүнчүлүгү.