Sobes.tech
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 .

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.