Curso de programación

¿Qué son las funciones?

Capítulo 32: Las funciones en programación

Las funciones son parte importante de casi todos los lenguajes de programación. Algunos de ellos no las utilizan, pero la mayoría que podrás ver hoy en día, sí.

"Función" en inglés se dice "function".

Las funciones son bloques de código que podemos colocar en los programas, para hacer una tarea específica. Por ejemplo, ¿te acuerdas del algoritmo de suma que hicimos anteriormente? El código se podría poner dentro de una función para poder utilizar su código en programas más complejos. Por ejemplo, en una calculadora. En ella, haríamos una función que haga la suma, otra la resta, etc.

En este capítulo te voy a mostrar las funciones de una forma muy básica. Cuando pasemos al módulo de Python básico, ya profundizaremos más.

A partir de este capítulo, normalmente, vamos a estar hablando de programa y no de algoritmo, ya que con las funciones, vamos a añadir cosas fuera del propio algoritmo, y otros algoritmos en la misma hoja de código.

Ventajas de usar funciones

Las funciones sirven para organizar el código. Ya que podemos dividir un programa o un algoritmo en secciones más pequeñas. Esto facilita la lectura del mismo.

También, nos ayuda a reutilizar código. Supongamos que creas una tarea en un programa. Esta tarea la necesitas en diferentes partes del mismo. Si utilizas la programación de la forma en que la hemos utilizado hasta ahora, tendrías que repetir el mismo código de esa tarea en diferentes algoritmos del programa. Sin embargo, gracias a las funciones, podrás guardar y reutilizar trozos enteros de código.

Además, si tenemos fallos en un programa, es más fácil probar cada parte con las funciones, que todo el código suelto en un solo programa.

Sintaxis de una función con PSeInt

Para añadir el bloque de código de función a tu programa, puedes utilizar el último de los botones que nos quedan por probar de la sección de comandos:

Funciones con PSeInt

Esto te añadirá el bloque fuera del algoritmo:

Funcion variable_de_retorno <- Nombre ( Argumentos )
	
Fin Funcion

Algoritmo funciones
	
FinAlgoritmo

Ejemplo práctico de función en PSeInt

Veamos un ejemplo practico con PSeInt. Vamos a hacer una sencilla función de suma con PSeInt:

// Esta función calcula y muestra el resultado de la suma de dos números
Funcion suma(numero1, numero2)
	Definir  resultado Como Real
	Escribir "Introduzca el primer número para sumar"
	Leer numero1
	Escribir "Introduzca el segundo número para sumar"
	Leer numero2
	resultado <- numero1 + numero2
	Escribir "El resultado de la suma es: " resultado
Fin Funcion

Algoritmo funciones
	Definir numero1, numero2 Como Real // Definimos las variables a utilizar en la función
	suma(numero1, numero2) // Llamamos a la función suma y le pasamos los datos
FinAlgoritmo

La función se llama suma. Esta función tiene unos paréntesis con los valores que necesita para hacer su cometido. Esto se conoce en programación como parámetros, que son esos dos números. Sin embargo, no tiene la declaración de estas variables, esto lo hacemos en el algoritmo. No obstante, lo puedes hacer en ambos sitios. No hay una zona específica donde no se puedan declarar variables.

La función, sirve para almacenar en resultado, el resultado de la suma de numero1 y numero2. Finalmente se lo muestra al usuario.

Las funciones, no ejecutan su código si no se las llama en alguna parte del programa. Entonces, quiere decir que este programa empieza por el algoritmo. Donde la estamos llamando.

La llamada (línea 14) se hace con dos valores, que son exactamente los que necesita la función. No debes darle ni 1, ni 3, ni 4, exactamente 2.

Llamar a una función, es lo mismo que con las variables, las llamamos por su nombre, solo que en este caso, si necesitan valores como los dos números, hay que dárselos, a parte del nombre.
No siempre requerirán valores en dichos paréntesis, depende de las necesidades en cada caso.

Probando el programa

Ejecutamos el programa y vemos que nos pide los dos números. Después, internamente, le da a suma() los dos números. Esta hace el cálculo y lo imprime en la consola.

Funciones en programación

Reutilizar código

Algo muy bueno de las funciones y uno de sus principales cometidos, es al reutilización del código. Para que te quede claro de una forma sencilla, te voy a poner un sencillo algoritmo sin funciones, con cinco sumas:

Algoritmo  suma
	// Variables para operar
	Definir resultado1, resultado2, resultado3, resultado4, resultado5 Como Real
	
	resultado1 <- 10 + 10
	resultado2 <- 1034 + 1013
	resultado3 <- 6557 + 3242
	resultado4 <- 76785 + 65346
	resultado5 <- 6346345 + 34.556
	
	Escribir  "El resultado es: " resultado1
	Escribir  "El resultado es: " resultado2
	Escribir  "El resultado es: " resultado3
	Escribir  "El resultado es: " resultado4
	Escribir  "El resultado es: " resultado5
FinAlgoritmo

En este código hay dos cosas repetitivas. La primera, es la declaración de varias variables de resultado, para un mismo propósito (imagina si necesitas 1000). La segunda, es la repetición de la misma frase con cinco Escribir idénticos en cuanto a frase.

Gracias a una función, puedes evitar repetir tanto:

Funcion suma(numero1, numero2)
	Escribir "El resultado es: " numero1 + numero2
FinFuncion

Algoritmo  sumas
	suma(10,10)
	suma(1034,1013)
	suma(6557,3242)
	suma(76785,65346)
	suma(6346345,34.556)
FinAlgoritmo

Con el tiempo aprenderás a valorar donde y como usar funciones. Hay cosas simples, que quizás no necesiten una función, y otras, que quizás si.
Siempre piensa, que están pensadas para que las utilices normalmente, más de una vez. Si solo necesitas llamar a una función una única vez, plantéate si no es mejor utilizar código sin una función.

Devolver valores con una función

Devolver valores es una de las cosas más comunes en una función. De hecho, esta tarea es más común que "Escribir" los valores en la consola.

Se trata de una cosa sencilla, pero que puede que no llegues a comprender del todo hasta que veamos algunas cosas más. Sin embargo, intentaré ponerte algún ejemplo fácil de entender.

Cuando imprimimos el resultado en la consola, con un Escribir, hacemos que esa función, no sea útil para nada más que para ese propósito ¿No sería ideal poder reutilizar el resultado para interactuar en otras partes del programa?

Llamando a la función, no podemos guardar el resultado, solo mostrar ese Escribir. Por lo tanto, no se puede hacer algo tan simple, como crear una variable que almacene la suma de los resultados de varias llamadas, como en este ejemplo:

// Esta función calcula y muestra el resultado de la suma de dos números
Funcion suma(numero1, numero2)
	Definir  resultado Como Real
	Escribir "Introduzca el primer número para sumar"
	Leer numero1
	Escribir "Introduzca el segundo número para sumar"
	Leer numero2
	resultado <- numero1 + numero2
	Escribir "El resultado de la suma es: " resultado
Fin Funcion

Algoritmo funciones
	Definir sumaTotal Como Real
	sumaTotal <- suma(70,80) + suma(10,50)
	Escribir "Sumando la primera suma y la segunda, nos da este resultado: " sumaTotal 
FinAlgoritmo
Lin 14 (inst 1): ERROR 278: El subproceso (SUMA) no devuelve ningún valor.
Lin 14 (inst 1): ERROR 278: El subproceso (SUMA) no devuelve ningún valor.

Con estos errores, tenemos ya una pista. Dice que el subproceso (función) no "devuelve" ningún resultado.

Pues eso mismo es lo que tenemos que conseguir, que la función sirva para devolver valores fuera de ella.

Puedes imaginar, que si creas dos variables y almacenas en ellas la llamada, te puede funcionar:

// Esta función calcula y muestra el resultado de la suma de dos números
Funcion suma(numero1, numero2)
	Definir  resultado Como Real
	Escribir "Introduzca el primer número para sumar"
	Leer numero1
	Escribir "Introduzca el segundo número para sumar"
	Leer numero2
	resultado <- numero1 + numero2
	Escribir "El resultado de la suma es: " resultado
Fin Funcion

Algoritmo funciones
	Definir sumaTotal Como Real
	Definir resultado1 Como Real
	Definir resultado2 Como Real
	resultado1 <- suma(70,80)
	resultado1 <- suma(10,50) 
	sumaTotal <- resultado1 + resultado2
	Escribir "Sumando la primera suma y la segunda, nos da este resultado: " sumaTotal 
FinAlgoritmo

Esto tampoco funciona.

Voy a simplificar más el programa, de forma que se vea lo que quiero explicar, de forma más sencilla.

// Esta función calcula y devuelve el resultado de la suma de dos números
Funcion resultado<-suma(numero1, numero2)
	resultado <- numero1 + numero2
Fin Funcion

Algoritmo funciones
	Definir sumaTotal Como Real
	sumaTotal = suma(70,80) + suma(10,50)
	Escribir "Sumando la primera suma y la segunda, nos da este resultado: " sumaTotal 
FinAlgoritmo
Valor de retorno en PseInt con funciones

Esta vez, si que funciona. Estoy pudiendo obtener el resultado y almacenarlo para hacer operaciones, como la suma de los dos valores devueltos en la variable sumaTotal.

Esto lo he conseguido gracias a la variable extra que he puesto en la declaración de la función. Fíjate, que la función se llama suma(), pero con una flecha, (<-), le creo la posibilidad de tener lo que se conoce como "valor de retorno" o "valor de devolución".

En la declaración de la función, declaro ese valor de retorno, pero dentro del código de la función (línea 3), estoy especificando la operación que quiero que devuelva la función. Eso lo hago utilizando la variable de retorno.

Al ser esto algo nuevo, quizás te sea confuso o no le veas bien el uso. No te preocupes, hay que seguir practicando con más ejemplos.

En Python, hacer esto con las funciones es mucho más fácil. Solo tienes que especificar una palabra clave concreta, llamada return, y luego poner lo que quieres devolver. El paso extra de crear una variable de retorno, no existe ahí.

Hagamos una última prueba más. Vamos a poner la entrada del usuario en el algoritmo. Ahí, le solicitaremos los números de la operación.

Tenemos la función suma, que recibe dos argumentos, a y b.
Además, la variable de retorno, se llama r. Esto con el fin de poner el ejemplo lo más simplificado posible.

En su bloque de código, lo único que hace la función, es devolver con la variable de retorno el resultado de la suma de los argumentos pasados a los parámetros en la la llamada a la función.

// Esta función calcula y muestra el resultado de la suma de dos números
Funcion r<-suma(a, b)
	r <- a + b
Fin Funcion

Algoritmo funciones
	// Variables
	Definir numero1 Como Real
	Definir numero2 Como Real
	Definir resultado Como Real
	
	// Solicitud de datos al usuario
	Escribir "Introduzca el primer número: "
	Leer numero1
	Escribir "Introduzca el segundo número: "
	Leer numero2
	
	// Llamada a la función
	resultado <- suma(numero1,numero2)
	
	// Mostrar resultado
	Escribir  "El resultado de la suma de " numero1 " + " numero2 " es: " resultado
	
FinAlgoritmo
Funciones en PSeInt

Las funciones, ya son un tema algo más avanzado. No obstante, con un poco más de práctica, las dominarás a la perfección. No dejo ejercicios para este apartado, ya que vas a practicarlo bastante en el proyecto de fin de módulo.

Anterior Siguiente

Comentarios

Si te quedan dudas sobre el temario, sobre Programación, PseInt, Python o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.