Middle
Pastāsti par funkcionālo programmēšanu un tās principiem.
sobes.tech AI
Atbilde no AI
Funkcionālais programmēšana (FP) ir programmēšanas paradigma, kas uzskata aprēķinus par matemātisku funkciju aprēķiniem, izvairoties no stāvokļa maiņas un mainīgajiem datiem.
Galvenie principi:
-
Tīras funkcijas: Funkcija tiek uzskatīta par tīru, ja:
- tā vienmēr atgriež to pašu rezultātu, ja ievadīti tie paši argumenti;
- tai nav blakusparādību (nemaina globālo stāvokli, neveic ievades/izvades operācijas utt.).
<?php // Tīra funkcija function add(int $a, int $b): int { return $a + $b; } // Nētīra funkcija (ir blakusparādība - maina globālo mainīgo) $count = 0; function increment_and_get(): int { global $count; $count++; return $count; } -
Datu nemainīgums: Pēc izveides dati nevar tikt mainīti. Tā vietā tiek izveidots jauns objekts ar nepieciešamajām izmaiņām.
<?php // Piemērs par nemainīgumu (PHP tas nav stingrs princips, bet to var realizēt) 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; } // Tā vietā, lai mainītu, atgriež jaunu objektu 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 paliek (1, 2), $p2 kļūst (2, 3) -
Funkcijas kā pirmās klases objekti: Funkcijas var tikt nodotas kā argumenti citām funkcijām, atgrieztas no funkcijām, piešķirtas mainīgajiem.
<?php // Funkcijas kā mainīgie $greeter = function(string $name): string { return "Hello, " . $name; }; echo $greeter("World"); // Izvade: Hello, World // Funkcijas kā argumenti 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] -
Blakus efekti: Aprēķini neietekmē programmas stāvokli ārpus to robežām.
-
Deklaratīvs: uzmanība tiek pievērsta ko jāaprēķina, nevis kā.
Priekšrocības:
- Uzlabota testējamība (tīras funkcijas ir viegli testējamas).
- Vienkāršāka paralelizācija (neizmaināms stāvoklis samazina sinhronizācijas problēmas).
- Labāka atkļūdošana.
- Koda paredzamāka uzvedība.