Funciones Anónimas en Programación: Uso y Ejemplos Prácticos
Resumen
¿Qué son las funciones anónimas y cómo se aplican en PHP?
Las funciones anónimas son un concepto clave en la programación, no solo en PHP, sino en muchos otros lenguajes como JavaScript. Se definen como funciones sin nombre y se usan en contextos donde la lógica necesita asignarse a una variable. Este enfoque ofrece gran flexibilidad, pues simplifica el uso y la reutilización de funciones. Aquí te explicamos cómo funcionan en PHP y exploraremos un ejemplo detallado.
¿Cómo se define una función anónima?
Para definir una función anónima en PHP, simplemente removemos el nombre de la función y directamente la asignamos a una variable. Así se puede añadir lógica interna, lo que permite que la variable que la contiene pueda ser usada como si fuera una función. Al final de la línea, como es una variable, se debe agregar un punto y coma.
$saludo=function($name){return"Hola, $name";};
En este ejemplo, $saludo ahora contiene una lógica que puede recibir un nombre y devolver un saludo en español.
¿Cómo se invoca una función anónima?
Para invocar la función anónima que hemos definido, simplemente utilizamos la variable a la que ha sido asignada, pasándole los parámetros requeridos:
echo$saludo("Linda");
Este código imprime "Hola, Linda". Así, las funciones anónimas permiten una estructura modular y re-utilizable en los scripts.
¿Cómo se pasan funciones anónimas como parámetros?
Un uso poderoso de funciones anónimas es pasarlas como parámetros a otras funciones. Este método amplifica la versatilidad de estas funciones permitiendo modificar el comportamiento de otras funciones.
functionsaludar($funcion,$name){return$funcion($name);}$es=function($name){return"Hola, $name";};$en=function($name){return"Hello, $name";};echosaludar($es,"Linda");// Imprime: Hola, Lindaechosaludar($en,"Linda");// Imprime: Hello, Linda
En este ejemplo, la función saludar espera una función anónima y un nombre, permitiéndonos usar una lógica u otra según el idioma pasado como parámetro.
¿Cuándo es útil emplear funciones anónimas?
Las funciones anónimas son particularmente útiles cuando se requiere:
Encapsular lógica específica que no se necesita reutilizar en otro lugar.
Pasar lógica personalizada a otras funciones como callbacks.
Mantener el código limpio y modular, evitando la contaminación del espacio global de nombres.
Conclusión: las funciones anónimas son una herramienta poderosa que permiten un control preciso sobre cómo se maneja la lógica en las variables. Esto no solo mejora la legibilidad y mantenibilidad del código, sino que también ofrece una gran flexibilidad y dinamismo al escribir programas en PHP y otros lenguajes. No dudes en experimentar y asegurar que entiendes a fondo este concepto esencial programático.
La funciones anónimas son geniales porque te evitas pensar en nombres para ellas xD
Como aporte: Una función anónima se suele usar muy a menudo como parámetro directo en lugar de guardarlo en una variable (por comodidad)
Los Closures también se llaman callbacks porque son las funciones que son llamadas de regreso al terminar de ejecutar el código de otra función que te la pidió
Buenos apuntes.
esta referencia de los callbacks me parece quedó haciendo falta en la clase para enmarcar la definición y uso completo de este tipo de implementaciones en el día-a-día, buen aporte compañero!
En este ejemplo podemos usar el Closure para ahorrarnos repetir la misma función de Ordenar pero con distinto criterio (menor a mayor, mayor a menor)
functionswap(&$varA,&$varB){// intercambia los valores de varA y varB $aux = $varA; $varA = $varB; $varB = $aux;}functionordenar(Closure $criterio,&$lista){for($i =0; $i <count($lista);++$i){for($j = $i; $j <count($lista);++$j){if($criterio($lista[$j], $lista[$i])){//Usamos la función pasada como criterio de ordenamientoswap($lista[$i], $lista[$j]);}}}}$menor=function($A, $B){//Devuelve true si A es menor que Breturn $A<$B;};$mayor=function($A, $B){//Devuelve true si A es mayor que Breturn $A>$B;};$lista =array(4,2,1,5,3,1,74,154,2,4,9,10);echo 'Lista desordenada<br>';showList($lista);ordenar($menor, $lista);echo 'Lista ordenada de menor a mayor<br>';showList($lista);ordenar($mayor, $lista);echo 'Lista ordenada de mayor a menor<br>';showList($lista);
Esto nos devuelve lo siguiente:
Lista desordenada
L=(4,2,1,5,3,1,74,154,2,4,9,10)Lista ordenada de menor a mayor
L=(1,1,2,2,3,4,4,5,9,10,74,154)Lista ordenada de mayor a menor
L=(154,74,10,9,5,4,4,3,2,2,1,1)```
Tu código fue muy ilustrativo, gracias.
pd, así construí la función 'showList':
functionshowList($lista){foreach($lista as $valor){ echo " $valor | ";} echo '</br>';}
Gran aporte, gracias!
Closure - Funciones anónimas
Una función anónima se usa en una variable que requiere lógica.
Al pasarle a una función el parámetro Closure le indica que va ha recibir una función anónimas. Si no colocamos el closure la función va a servir igual, pero puede que se puedan dar muchos tipos de error a futuro, así que es una buena práctica ponerlo.
<?php$greet=function($name){return"Hola, $name";};echo$greet('Kato');functiongreet2(Closure$lang,$name){return$lang($name);}$es=function($name){return"Hola, $name";};$en=function($name){return"Hello $name";};echogreet2($es,'fea (its a joke, EDN)');echogreet2($en,'Karen 🤞');
Aqui un ejemplo de como se puede manejar respuesta de apis usando funciones anonimas
Gracias Danny por el aporte, pero también debo decirte que es mala práctica devolver directamente la etiqueta h1.
Hola a todos les dejo mis apuntes de la clase con un poco de investigación fuera de ella para enriquecer el ejercicio 💚.
Excelente!!
gracias
Ejemplo de Closure, Me gusto esta caracteristica, aqui calcule un valor de pesos COP , para cuando quiera viajar a europa o japon ya sepa la conversion :)
🤔 Con clousure podemos representar funciones anónimas, funciones que no tienen un identificador.
Funciona, pero hay mejores practicas??
functionoperadores(Closure $tipo, $valor, $valor2){return$tipo($valor,$valor2);}$multiplica=function($valor, $valor2){ $resultado = $valor * $valor2;return"La multiplicación de $valor por $valor2 es $resultado";};$resta=function($valor, $valor2){ $resultado = $valor - $valor2;return"La resta de $valor por $valor2 es $resultado";};$division=function($valor, $valor2){ $resultado = $valor / $valor2;return"La división de $valor por $valor2 es $resultado";};echo operadores($multiplica,15,10)."<br/>";echo operadores($resta,15,10)."<br/>";echo operadores($division,15,15)."<br/>";```
El mejor profesor lejos !!
Ejercicio de operaciones aritméticas:
<?php
functionoperacionMatematica(Closure $operation, $num1, $num2){return$operation($num1, $num2);}$suma=function($num1, $num2){return $num1 + $num2;};$resta=function($num1, $num2){return $num1 - $num2;};$multiplicacion=function($num1, $num2){return $num1 * $num2;};$division=function($num1, $num2){if( $num2!=0){return $num1 / $num2;}return"operación no permitida, divisor no puede ser igual a cero";};//escribir en el primer parámetro el nombre de la función anónimaecho operacionMatematica($suma,65,15);
Recuerden que podemos tener cualquier cantidad de parámetros en las funciones anónimas, hagan ejercicios sencillos y prácticos como éste que les comparto para que tengan más claro el concepto.
Saludos y recuerden nunca parar de aprender <3
Se tiene que tener mucho cuidado con el uso de funciones anónimas, facilmente podemos terminar con un código espagueti
No me queda claro bajo que condiciones debería usar yo estas funciones anonimas.
Estoy igual, no me queda muy claro porque usarlas en lugar de asignar "Hola, $name" a una variable directamente no me queda muy claro su uso
¡Hola! Este es simplemente un ejemplo que el profesor hizo para explicar qué es un closure, por supuesto que es más fácil poner directamente el string y la variable, pero de nuevo, es un ejemplo para explicar el uso de las closures.
Básicamente las closures son como los callbacks de JavaScript y sirven para lo mismo, es decir, tú puedes mandar por parámetro una función que será ejecutada por otra función :D
🍃 En el código anterior, se utiliza el concepto de clousures en PHP. Un closure es una función anónima, es decir, una función sin nombre que se puede almacenar en una variable y que puede tener acceso a las variables externas a la función.
En este caso, las variables $es y $en son clousures que reciben un parámetro $name y devuelven una cadena de saludo en español y en inglés, respectivamente.
La función greet() recibe dos argumentos: una variable de tipo Closure y una variable $name. La variable de tipo Closure es la función anónima que se va a ejecutar y el argumento $name es el nombre que se va a usar en el saludo.
Finalmente, se llama a la función greet() dos veces, una vez con el closure $es y otra vez con el closure $en, y se pasa el argumento "Lynda" como el valor de $name. Esto causará que se devuelva un saludo en español y en inglés, respectivamente.
En resumen, los clousures permiten crear funciones dinámicas y flexibles, y se utilizan comúnmente para trabajar con callbacks y para crear funciones de alto nivel que tienen acceso a variables y estado externos.
// Declaración de la función greet que recibe dos argumentos: un closure y un nombrefunctiongreet(Closure$lang,$name){// La función greet retorna el resultado de la ejecución del closurereturn$lang($name);}// Declaración de la variable $es, la cual es un closure$es=function($name){// El closure $es retorna un saludo en españolreturn"hola, $name";};// Declaración de la variable $en, la cual es un closure$en=function($name){// El closure $en retorna un saludo en inglésreturn"Hello, $name";};// Llamada a la función greet con el closure $es y el nombre "Lynda"echogreet($es,"Lynda");// Llamada a la función greet con el closure $en y el nombre "Lynda"echogreet($en,"Lynda");
En resumen, los clousures permiten crear funciones dinámicas y flexibles, y se utilizan comúnmente para trabajar con callbacks y para crear funciones de alto nivel que tienen acceso a variables y estado externos.
Funcion para obtener la semana, el dia, mes o año de una fecha