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.
Declaracion 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.
La sintaxis para declarar una función es:
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 funcion no se utiliza return devolvera el valor nil
Ejemplos de declaración de funciones en JARU:
//Función que no recibe parámetros y no retorna ningún valor
func imprimir_mensaje()
print("Hola mundo")
end
//Función que recibe un parámetro 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
use Draw
En cuanto a las ventajas de pasar los parametros por referencia, una de ellas es que se pueden modificar variables externas desde dentro de la función. Esto puede ser útil en algunos casos en los que desees modificar un valor global desde dentro de una función. Además, el paso por referencia puede ser más eficiente en términos de rendimiento ya que no se crea una copia del objeto, se utiliza el objeto original.
Llamar a una funcion
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. Por ejemplo, si se tiene una función llamada “imprimir_mensaje” que acepta un argumento de tipo cadena, se puede llamar a esta función de la siguiente manera:
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. Por ejemplo, si la función “suma” retorna el resultado de sumar dos números, se puede almacenar el resultado de la siguiente manera:
resultado = suma(3, 4)
En este caso, la variable resultado almacenaría el valor 7.
En resumen, llamar a una función en JARU consiste en escribir el nombre de la función seguido de paréntesis y, opcionalmente, pasando argumentos dentro de los paréntesis. También se puede almacenar el valor retornado en una variable.
Es importante tener en cuenta que las funciones pueden ser anidadas, es decir, una función puede llamar a otra función dentro de su cuerpo.
En resumen, las funciones en JARU son una herramienta importante para organizar y reutilizar código, permitiendo dividir un programa en partes más pequeñas y manejables.
Declaracion anidada de funciones
En JARU, se pueden declarar funciones dentro de otras funciones de la siguiente manera:
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. Cuando se llama a “funcion_padre”, primero se ejecuta el código dentro de esa función, mostrandose en consola Soy la función padre y luego se llama a “funcion_hija”, que mostrara Soy la función hija.
También es posible pasar parámetros a la función hija y devolver valores de la misma. En el siguiente ejemplo, se pasan dos parámetros “num1” y “num2” a la función hija y se retorna su suma, luego en la funcion padre se guarda el valor retornado en la variable result y se muestra en consola:
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 mostrara: El resultado es: 5
Recursion
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.
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á or un desbordamiento de pila.
Por ejemplo, la función recursiva “factorial” se calcula de la siguiente manera:
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á.
Algunos ejemplos comunes de recursión incluyen:
- 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, es utilizada en una variedad de campos, desde la informática hasta las matemáticas pasando por la inteligencia artificial y JARU te permite usarla.