Curso de Raku / Esenciales / Más sobre funciones
Multi-funciones
Raku implementa despacho múltiple basado en la firma de la función. Permite crear funciones que comparten el nombre pero tienen diferentes tipos de datos de entrada. Usa el declarador multi
para cada una de las variantes de la función.
multi sub add(Int $x, Int $y) { $x + $y }
multi sub add(Str $x, Str $y) { $x ~ $y }
(Está bien omitir sub
después de multi
.)
Si tienes dos variantes de la misma función, el compilador realiza un despacho múltiple dependiendo de los argumentos que vea en la llamada a la función. Compara las siguientes dos llamadas:
say add(10, 20); # 30
say add('10', '20'); # 1020
La primera llamada activa la función con parámetros enteros, mientras que la segunda llamada ejecuta la segunda variante de la función que espera dos cadenas.
Parámetros literales
Un caso interesante para las multi-funciones es tener variantes que tienen valores literales como parámetros. Considera las siguientes dos variantes:
multi sub f(42) {say 'Esta es la respuesta'}
multi sub f($x) {say "$x no es la respuesta"}
La primera variante solo se ejecuta cuando llamas a la función con el valor exacto de 42. En otros casos, se usa la segunda variante. El orden en el que se definen estas funciones no importa.
f(10); # 10 no es la respuesta
f(42); # Esta es la respuesta
Práctica
Completa los cuestionarios que cubren el contenido de este tema.
Navegación del curso
← Más sobre funciones / Tipo de retorno | 💪 Ejercicio: Factorial con multi-funciones →
Esta página está traducida automáticamente con ChatGPT 4o. Texto original en inglés.
Traducciones de esta página: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська