Middle
Räägi funktsionaalsest programmeerimisest ja selle põhimõtetest.
sobes.tech AI
Vastus AI-lt
Funktsionaalne programmeerimine (FP) on programmeerimise paradigma, mis käsitleb arvutusi matemaatiliste funktsioonide arvutustena, vältides oleku muutmist ja muudetavaid andmeid.
Peamised põhimõtted:
-
Puhas funktsioon: Funktsioon loetakse puhtaks, kui:
- see tagastab alati sama tulemuse sama sisendi korral;
- sellel ei ole kõrvaltoimeid (ei muuda globaalseid olekuid, ei tee sisend/väljund operatsioone jms).
<?php // Puhas funktsioon function add(int $a, int $b): int { return $a + $b; } // Ebapuhas funktsioon (omab kõrvaltoimeid - muudab globaalseid muutujaid) $count = 0; function increment_and_get(): int { global $count; $count++; return $count; } -
Andmete muutmatus: Pärast loomist ei saa andmeid muuta. Selle asemel luuakse uus objekt vajalike muudatustega.
<?php // Näide muutumatuse kohta (PHP-s see ei ole rangelt keele põhimõte, kuid seda saab rakendada) 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; } // Selle asemel, et muuta, tagastame uue objekti 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 jääb (1, 2), $p2 saab (2, 3) -
Funktsioonid kui esimese klassi objektid: Funktsioonid võivad olla antud argumentidena teistele funktsioonidele, tagastatud funktsioonidest, omistatud muutujatele.
<?php // Funktsioonid kui muutujad $greeter = function(string $name): string { return "Hello, " . $name; }; echo $greeter("World"); // Väljund: Hello, World // Funktsioonid argumentidena 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] -
Kõrvaltoimete puudumine: Arvutused ei mõjuta programmi olekut väljaspool nende ulatust.
-
Deklaratiivsus: keskendutakse millele tuleb arvutada, mitte kuidas.
Eelised:
- Paranenud testitavus (puhas funktsioonid on kergesti testitavad).
- Lihtsam paralleelimine (muutumat olekut vähendades vähendatakse sünkroniseerimise probleeme).
- Parema silumisvõimega.
- Koodi ennustatav käitumine.