Funciones
Es bastante probable que hayamos utilizado funciones nativas de un lenguaje alguna vez sin darnos cuenta, sin embargo también podemos definir funciones propias.
Cualquier función tendrá un nombre, unos argumentos de entrada, un código a ejecutar y unos parámetros de salida. Al igual que las funciones matemáticas, en programación nos permiten realizar diferentes operaciones con la entrada, para entregar una determinada salida que dependerá del código que escribamos dentro.
Prototipo de la definición de una función
PalabraReservada NombreDeLaFunción(Parámetros)
CuerpoDeLaFunción
return ValorDeRetorno
Algo que diferencia en cierto modo las funciones en el mundo de la programación, es que no sólo realizan una operación con sus entradas, sino que también parten de los siguientes principios:
- El principio de reusabilidad, que nos dice que si por ejemplo tenemos un fragmento de código usado en muchos sitios, la mejor solución sería pasarlo a una función. Esto nos evitaría tener código repetido, y que modificarlo fuera más fácil, ya que bastaría con cambiar la función una vez.
- El principio de modularidad, que defiende que en vez de escribir largos trozos de código, es mejor crear módulos o funciones que agrupen ciertos fragmentos de código en funcionalidades específicas, haciendo que el código resultante sea más fácil de leer.
Argumentos de entrada
Empecemos por la función más sencilla de todas. Una función sin parámetros de entrada ni valores de retorno.
Nota:
En los ejemplos el código está envuelto entre 2 comentarios que indican el inicio y el fin del código.
# Python, inicio del código
def di_hola():
print("Hola")
# Fin del código
Hemos declarado o definido la función. El siguiente paso es llamarla con di_hola(). Lo que imprime es "Hola".
// JavaScript, inicio del código
function di_hola() {
alert("Hola");
}
// Fin del código
Vamos a complicar un poco las cosas pasando un argumento de entrada. Ahora si pasamos como entrada un nombre, se imprimirá Hola y el nombre.
# Python, inicio del código
def di_hola(nombre):
print("Hola ", nombre)
di_hola("Mateo")
# Fin del código
// JavaScript, inicio del código
function di_hola(nombre) {
alert("Hola " + nombre);
}
di_hola("Mateo");
// Fin del código
Argumentos por posición
Los argumentos por posición o posicionales son la forma más básica e intuitiva de pasar parámetros. Si tenemos una función resta() que acepta dos parámetros, se puede llamar como se muestra a continuación.
# Python, inicio del código
def resta(a, b):
return a-b
resta(5, 3)
# Fin del código
Al tratarse de parámetros posicionales, se interpretará que el primer número es la a y el segundo la b. El número de parámetros es fijo, por lo que si intentamos llamar a la función con solo uno, dará error. De la misma forma tampoco es posible usar mas argumentos de los que tiene la función definidos, ya que no sabría que hacer con ellos.
Instrucción return
Una instrucción return termina la ejecución de una función y devuelve el control a la función de llamada. La ejecución se reanuda en la función de llamada, en el punto que sigue inmediatamente. Una instrucción return puede devolver o no algún valor a la función de llamada.
# Python, inicio del código
def es_par(num):
if num%2 == 0:
return "Es par"
else:
return "Es impar"
resultado = es_par(3)
print(resultado)
# Fin del código
Argumentos y parámetros
En muchas ocasiones hablamos indistintamente de parámetros y argumentos para referirnos a los valores que “pasamos” entre paréntesis en una función.
Pero ¿Cuál es ladiferencia?
Una función puede tener cero o más parámetros. Así, los parámetros son los nombres que aparecen en la definición de una función. Por su parte, los argumentos son los valores que le pasamos (y que, por tanto, recibe) una función.
# Python, inicio del código
def saludo(nombre):
print(nombre)
saludo("Mateo")
# Fin del código
En este ejemplo (nombre) es el parámetro de la función, que trabaja como una variable interna dentro del cuerpo, y que contiene como valor la cadena "Mateo", que es el argumento en la llamada a la función.
Parámetros opcionales
Tal vez queramos tener una función con algún parámetro opcional, que pueda ser usado o no dependiendo de diferentes circunstancias. Para ello, lo que podemos hacer es asignar un valor por defecto a la función. En el siguiente caso c valdría cero salvo que se indique lo contrario.
// JavaScript, inicio del código
function suma(a, b, c=0) {
return a+b+c;
}
resultado = suma(5,5,3);
// Fin del código
En el ejemplo anterior el valor devuelto es 13. Sin embargo el parámetro c tiene un valor por defecto, por lo que la función puede ser llamada sin ese argumento.
suma(4,3)
En este ejemplo se devuelve "7".
También podemos asignar un valor por defecto a todos los parámetros, por lo que se podría llamar a la función sin ningún argumento de entrada.
// JavaScript, inicio del código
function suma(a=3, b=5, c=0) {
return a+b+c
}
suma()
// Fin del código
Lo que devolvería "8". O haciendo uso de lo que hemos visto antes y usando los nombres de los argumentos. suma(a=5, b=3) #8
Las funciones tienen implementaciones particulares en los diferentes lenguajes. Argumentos variables, funciones anónimas, etcétera. Pero tocará revisarlo en cada uno de ellos.