Funciones
Las funciones son bloques de código que pueden ser reutilizados en diferentes partes del programa, pueden aceptar parámetros de entrada y retornar un valor de salida. Esto ayuda a organizar el código y a hacerlo más legible y mantenible. Además, al usar funciones, es posible evitar la repetición de código y facilitar la depuración.
Al igual que las variables y los objetos, las funciones también son valores de primera clase en JARU, lo que significa que pueden ser asignados a variables, pasados como parámetros a otras funciones y retornados como valor de otras funciones.
En JARU se pueden pasar hasta 255 parámetros a una función y se utiliza paso por referencia para los parámetros de las funciones, lo que significa que si una variable es modificada dentro de una función, su valor también cambia fuera de la función.
Declaración de función
Para declarar una función en JARU, se utiliza la palabra clave func seguida del nombre que le queramos dar a la función, los parámetros entre paréntesis y se finaliza con la palabra clave end.
func miFuncion(parametro1, parametro2)
// cuerpo de la función
end
Los parámetros de una función son variables que se utilizan para recibir los valores que se pasan a la función al momento de ser llamada. El número de parámetros es opcional, pero puede ser un máximo de 255. El traspaso de parámetros en JARU es por referencia, lo que significa que si se modifica un parámetro dentro de la función, esa modificación se reflejará en el valor original del parámetro.
Para retornar un valor de una función se utiliza la palabra clave return seguida del valor a retornar. Si una función no retorna ningún valor, no es necesario utilizar la palabra clave return.
Realmente en JARU todas las funciones retornan un valor. Si en la función no se utiliza return, devolverá el valor nil.
Ejemplos de declaración de funciones
// Función que no recibe parámetros y no retorna ningún valor
func imprimir_mensaje()
print("Hola mundo")
end
// Función que recibe parámetros y retorna un valor
func sumar(num1, num2)
return num1 + num2
end
// Función que recibe varios parámetros y no retorna ningún valor
func imprimir_datos(nombre, edad, ciudad)
print("Nombre: ", nombre, " Edad: ", edad, " Ciudad: ", ciudad)
end
Llamar a una función
Llamar a una función es el proceso de ejecutar el código contenido dentro de esa función. En JARU, se puede llamar a una función utilizando su nombre seguido de paréntesis y, opcionalmente, pasando argumentos dentro de los paréntesis.
imprimir_mensaje("Hola mundo")
En este caso, la función imprimir_mensaje recibiría el argumento "Hola mundo" y lo utilizaría para imprimir un mensaje en pantalla.
También es posible almacenar el valor retornado por una función en una variable:
resultado = sumar(3, 4)
En este caso, la variable resultado almacenaría el valor 7.
Las funciones pueden ser anidadas, es decir, una función puede llamar a otra función dentro de su cuerpo.
Declaración anidada de funciones
En JARU, se pueden declarar funciones dentro de otras funciones:
func funcion_padre()
func funcion_hija()
println("Soy la funcion hija")
end
println("Soy la funcion padre")
funcion_hija()
end
funcion_padre()
En este ejemplo, la función "funcion_padre" es la función principal que contiene a "funcion_hija" dentro de ella. La función "funcion_hija" sólo se puede llamar dentro de "funcion_padre", ya que está declarada dentro de esa función.
También es posible pasar parámetros a la función hija y devolver valores de la misma:
func funcion_padre()
func funcion_hija(num1, num2)
return num1 + num2
end
var result = funcion_hija(2, 3)
print("El resultado es: ", result)
end
funcion_padre()
En consola se mostrará: El resultado es: 5
Recursión
En JARU se permite la recursión, esto es una función que se llama a sí misma para resolver un problema. La recursividad se utiliza a menudo para resolver problemas que pueden ser divididos en subproblemas más pequeños del mismo tipo.
Para crear una función recursiva en JARU, se debe definir la función de la misma manera que se define cualquier otra función, pero dentro de la función, se debe incluir una llamada a la misma función.
func factorial(n)
if (n == 0) then
return 1
else
return n * factorial(n - 1)
end
end
En este ejemplo, la función "factorial" se llama a sí misma con un parámetro uno menor hasta que se alcanza el caso base (n == 0).
Es importante tener cuidado al utilizar funciones recursivas ya que si no se tiene un caso base adecuado o si los argumentos que se pasan a la función no llevan a la solución del problema, puede causar un bucle infinito y el programa se detendrá por un desbordamiento de pila.
Ejemplos comunes de recursión
- Algoritmos de búsqueda y ordenamiento: Algoritmos como el ordenamiento quicksort y el algoritmo de búsqueda binaria utilizan recursión para dividir un problema en problemas más pequeños y resolverlos de forma independiente.
- Problemas de backtracking: Problemas como el laberinto de ratón y la solución de sudokus pueden resolverse utilizando recursión para probar diferentes opciones y retroceder cuando se llega a un camino sin solución.
- Problemas matemáticos: Problemas como la serie de Fibonacci y el cálculo del factorial pueden resolverse de forma eficiente utilizando recursión.
- Problemas de grafos: Algoritmos como la búsqueda en profundidad y la búsqueda en anchura para recorrer un grafo utilizan recursión para explorar los diferentes nodos.
La recursión es una herramienta poderosa para resolver problemas que se pueden dividir en subproblemas independientes, y JARU te permite usarla.