Habla sobre la programación funcional y sus principios.
sobes.tech AI
Respuesta de la IA
La programación funcional (PF) es un paradigma de programación que considera los cálculos como la evaluación de funciones matemáticas, evitando cambios de estado y datos mutables.
Principios básicos:
-
Funciones puras: Una función se considera pura si:
- Siempre devuelve el mismo resultado para los mismos argumentos.
- No tiene efectos secundarios (no modifica el estado global, no realiza entrada/salida, etc.).
<?php // Función pura function add(int $a, int $b): int { return $a + $b; } // Función no pura (tiene efecto secundario - modifica una variable global) $count = 0; function increment_and_get(): int { global $count; $count++; return $count; } -
Inmutabilidad de los datos: Una vez creados, los datos no pueden ser modificados. En lugar de cambiar un objeto existente, se crea uno nuevo con las modificaciones necesarias.
<?php // Ejemplo de inmutabilidad (en PHP no es un principio estricto del lenguaje, pero se puede implementar) 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; } // En lugar de modificar, devuelve un nuevo objeto 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 permanece en (1, 2), $p2 se convierte en (2, 3) -
Funciones como objetos de primera clase: Las funciones pueden ser pasadas como argumentos a otras funciones, devueltas desde funciones, asignadas a variables.
<?php // Funciones como variables $greeter = function(string $name): string { return "Hello, " . $name; }; echo $greeter("World"); // Salida: Hello, World // Funciones como argumentos 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] -
Ausencia de efectos secundarios: Los cálculos no afectan el estado del programa fuera de su ámbito.
-
Declaratividad: Se enfoca en qué se necesita calcular, no en cómo.
Ventajas:
- Mejor capacidad de prueba (funciones puras son fáciles de testear).
- Simplificación del paralelismo (la ausencia de estado mutable reduce problemas de sincronización).
- Mejor depuración.
- Comportamiento del código más predecible.