Parla di programmazione funzionale e dei suoi principi.
sobes.tech AI
Risposta dell'AI
La programmazione funzionale (FP) è un paradigma di programmazione che considera i calcoli come valutazione di funzioni matematiche, evitando modifiche di stato e dati mutabili.
Principi fondamentali:
-
Funzioni pure: Una funzione è considerata pura se:
- Restituisce sempre lo stesso risultato per gli stessi argomenti.
- Non ha effetti collaterali (non modifica lo stato globale, non esegue input/output, ecc.).
<?php // Funzione pura function add(int $a, int $b): int { return $a + $b; } // Funzione non pura (ha effetto collaterale - modifica una variabile globale) $count = 0; function increment_and_get(): int { global $count; $count++; return $count; } -
Immutabilità dei dati: Una volta creati, i dati non possono essere modificati. Invece di modificare un oggetto esistente, si crea uno nuovo con le modifiche necessarie.
<?php // Esempio di immutabilità (in PHP non è un principio rigoroso del linguaggio, ma può essere implementato) 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; } // Invece di modificare, restituisce un nuovo oggetto 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 rimane (1, 2), $p2 diventa (2, 3) -
Funzioni come oggetti di prima classe: Le funzioni possono essere passate come argomenti ad altre funzioni, restituite da funzioni, assegnate a variabili.
<?php // Funzioni come variabili $greeter = function(string $name): string { return "Hello, " . $name; }; echo $greeter("World"); // Output: Hello, World // Funzioni come argomenti 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] -
Assenza di effetti collaterali: I calcoli non influenzano lo stato del programma al di fuori del loro ambito.
-
Dichiaratività: Si concentra su cosa deve essere calcolato, non su come.
Vantaggi:
- Migliore testabilità (le funzioni pure sono facili da testare).
- Semplificazione del parallelismo (l’assenza di stato mutabile riduce i problemi di sincronizzazione).
- Migliore debug.
- Comportamento del codice più prevedibile.