Lambda - PHP 5.3

Que es lambda ? pues es una/varias función/es dentro de una misma con diferencia que estas son anónimas (osease no puede ser llamadas luego puesto que no son definidas con nombre.) Esta fue incorporada en PHP 5.3 aunque en otros lenguajes existe desde hace tiempo.

ejemplo:
<?php
// lambda Drvy Monkey
$monkeys = function () { print 'Monkeys rlz'; };
print $monkeys();
?

Ahora, imagínense que tenemos array con personas y sus respectivas edades. Algo así:
<?php
// lambda Drvy Monkey.
$people = array (
   0=>array('name'=>'Victoria','age'=>17),
   1=>array('name'=>'Sarah','age'=>19),
   2=>array('name'=>'Fatima','age'=>16),
   3=>array('name'=>'Mikel','age'=>20),
   4=>array('name'=>'Monkey','age'=>21)
);
?>>
Y ahora lo que queremos es filtrar esto para que nos muestre únicamente las personas que ya son mayores de edad. Normalmente (al menos en mi caso) yo escogería la función array_filter y la filtraría. Algo así:

<?php
// lambda Drvy Monkey.
$people = array (
   0=>array('name'=>'Victoria','age'=>17),
   1=>array('name'=>'Sarah','age'=>19),
   2=>array('name'=>'Fatima','age'=>16),
   3=>array('name'=>'Mikel','age'=>20),
   4=>array('name'=>'Monkey','age'=>21)
);

function filter_ages($age){
 if(18<=$age['age']){ return $age; }
}

$ages = array_filter($people,'filter_ages');
print_r($ages);
?>

Esto lo que haría seria mostrarnos las personas que tienen 18 o mas años. El problema viene en que ya defines la función filter_ages que podrías querer usarla para otra cosa o y que añades lineas innecesarias al código, aparte de que queda muy difícil de leer si la función filter_ages esta 10-100 lineas mas arriba. Para solucionar esto lo mas fácil es usar una función dentro de esa función.

<?php
// lambda Drvy Monkey.
$people = array (
   0=>array('name'=>'Victoria','age'=>17),
   1=>array('name'=>'Sarah','age'=>19),
   2=>array('name'=>'Fatima','age'=>16),
   3=>array('name'=>'Mikel','age'=>20),
   4=>array('name'=>'Monkey','age'=>21)
);

$ages = array_filter($people,
  function($age){
   if(18<=$age['age']){ return $age; }
  }
);
print_r($ages);
?>

El resultado seria el mismo que el anterior, pero con diferencia de que nos ahorramos crear una función especifica para eso y aparte no es tan confuso.

Saludos

Comentarios

Entradas populares de este blog