Saltar la navegación

Programación II: Variables y funciones

1. Introducción y objetivos

En este tema aprenderemos qué son las variables y qué son las funciones, para qué se utilizan y cómo podemos implementarlas en los programas que realizamos.
Los objetivos que se pretenden conseguir son:
▶ Aprender qué es una variable, cómo declararla y cómo modificarla.
▶ Conocer los tipos de variables.
▶ Aprender qué es una función y para qué se utiliza.
▶ Diferenciar entre funciones sin retorno y funciones con retorno.
▶ Implementar las funciones en las programaciones.

2. Las variables

Una variable es como una “caja” donde guardamos un dato. Este valor que guardamos lo podremos consultar y utilizar siempre que lo necesitemos. Si no lo
guardásemos el programa no lo recordaría. Además, como veremos más adelante, en cualquier momento podremos cambiar el valor guardado en la variable.

Figura 44. Ejemplificación de variables.

Un ejemplo de variable es la edad de una persona, cuyo valor varía cada año al sumarle 1 a los años que ya se tenían acumulados, o la puntuación de un juego.
Declaración de variables
Al declarar una variable en nuestro programa lo que hacemos es crear esa caja y guardar por primera vez un dato en ella.
Para identificar en todo momento nuestra variable (o nuestra caja) debemos ponerle un nombre. Los nombres de las variables solo pueden estar compuestos por
letras, dígitos, guiones o guiones bajos. No pueden llevar espacios en blanco, ni puntos, comas, tildes, etc. Además, nunca debemos nombrarlas como algún
elemento que ya exista en el programa, por ejemplo LED, zumbador, botón, etc.
En el momento en que declaramos una variable definimos de qué tipo es. Por ejemplo, si lo primero que guardamos es un número, esa variable siempre va a
guardar números, pero si lo primero que guardamos es una palabra o texto, solo podrá contener texto.
- Variable numérica: si lo que guarda es un número. 
- Variable textual: si guarda un texto. 
- Variable lógica: si guarda un dato lógico (verdadero o falso). 
También podemos guardar en una variable el valor que nos devuelve un sensor.

Figura 45. Bloques de declaración de variables según su tipo.

Variables globales y variables locales

Al declarar una variable, también será importante decidir si queremos utilizar una variable global o una variable local.
● Variables globales. Se crean al inicio del programa, en el apartado Variables globales y funciones, y son universales, lo que significa que pueden utilizarse
en cualquier momento que se requiera en nuestra programación.
● Variables locales. Se pueden crear en las Instrucciones iniciales (Setup) o en el Bucle principal (Loop). A diferencia de las variables globales, solo se
pueden utilizar dentro de la función donde han sido declaradas (Loop o Setup).

Lectura y modificación de los valores de las variables

Una vez declarada la variable, podemos realizar dos acciones con ella:
- leer el valor almacenado en la misma 
- modificar el valor que posee 
Realizamos un ejemplo para ver todo el proceso. Nuestro reto es programar un contador de personas para controlar la entrada a un estadio de fútbol. Contaremos
cada persona pulsando un botón. Los pasos que vamos a realizar son:
- Declaramos la variable global número y la igualamos a 0 (para que cada vezque se inicie el programa comience a contar desde 0).
- Programamos un condicional en el Bucle principal (Loop) para que con cada pulsación del botón sume una persona más a la variable número.
- Añadimos una pequeña espera para que, si mantenemos el botón pulsado, no cuente personas de más.

Figura 46. Ejemplo de programación con variables.

3. Las funciones

Una función es un fragmento de programa diseñado para ser reutilizado en múltiples ocasiones. Es uno de los elementos más importantes de la programación, puesto que permite agrupar una serie de tareas en una sola instrucción. De esta forma podemos reutilizar un programa que ya hayamos escrito y nuestro código será menos repetitivo. Normalmente una función realiza una o varias tareas pudiendo, al terminar, devolver un valor (numérico, textual, lógico o de otro tipo) que será utilizado por el programa principal (funciones con retorno) o no devolver nada (funciones sin retorno).

Funciones sin retorno

Por ejemplo, una tarea que hemos realizado varias veces en otros ejercicios es hacer parpadear un LED, lo cual implica una serie de pasos (encender, esperar, apagar...).
Podría resultarnos útil y cómodo no tener que escribir todos los pasos cada vez, sino tener una función parpadeo que lo automatice.
Lo primero que tenemos que hacer es definir qué hace nuestra función, es decir, qué tarea o conjunto de tareas realiza. Esto siempre lo tenemos que escribir en el apartado Variables globales y funciones de nuestro programa. Para ello utilizamos la pestaña función1, donde debemos cambiarle el nombre haciendo clic en los tres puntos y con ello quedará declarada. Al igual que con las variables, debemos nombrarlas siguiendo las mismas reglas. Después, siempre que queramos utilizarla, tendremos que ejecutarla en el Bucle principal (Loop) con el bloque Ejecutar de la categoría Funciones:

Figura 47. Declaración y ejecución de una función.

Imaginemos ahora que queremos tocar una pequeña melodía varias veces en distintos momentos del programa y encender un LED presionando un botón.
Normalmente deberíamos repetir todos los bloques de la melodía cada vez que queramos usarla. Al final tendríamos un programa largo y difícil de entender y
modificar. ¿Por qué no reutilizar siempre los mismos bloques? Vamos a crear una función que contenga la melodía para más tarde utilizarla siempre que la
necesitemos. Para ello usaremos el zumbador, un botón y un LED.
De nuevo, para poder utilizar una función, primero hay que crearla dentro de la zona Variables globales y funciones.

Figura 48. Ejemplo de declaración de una función.

Una vez creada, es necesario ejecutarla dentro del Bucle principal (Loop). Las funciones no se ejecutan a no ser que las llamemos mediante el bloque Ejecutar.

Figura 49. Ejemplo de ejecución de una función dentro de una estructura de programación.

Si no utilizásemos la función el programa quedaría de la siguiente manera:

Figura 50. Comparativa de programación sin el uso de funciones.

Como podemos ver, el programa es mucho más corto usando funciones, siendo mucho más rápido y fácil de crear. Además, si por alguna razón queremos modificar
la melodía, solo tendremos que cambiarla en la función y no en cada parte del programa.

Funciones con retorno

Vamos a ver un ejemplo con el siguiente reto: necesitamos realizar un medidor de distancia que nos devuelva el valor de la misma en metros.
Utilizaremos para este reto el componente ultrasonidos que nos va a medir la distancia aproximada en centímetros. Por tanto, podemos realizar una función con
retorno que devuelva el valor de haber realizado la operación de conversión de la magnitud:

distancia (cm) / 100 (cm/m) = distancia (m)

Después, mostraremos este valor por el Monitor Puerto Serie. Declaramos la función en el apartado de Variables globales y funciones.

Figura 51. Declarar una función.

Damos un nombre a la función (en nuestro caso distancia_metros) y en su interior, declaramos la variable que va a contener la operación matemática, nosotros la
hemos llamado distancia y la igualamos a dicha operación.
En el Bucle principal (Loop), utilizamos el bloque Enviar de la categoría de Componentes, para mandar por monitor puerto serie el valor que devuelve la
función tras haberla ejecutado, por lo que utilizaremos para rellenarlo el bloque Ejecutar.

Figura 52. Bloque ejecutar función con retorno.

Y añadimos también una pequeña espera de 0,5 segundos para poder ver mejor los valores en el Monitor Puerto Serie.
El programa quedaría de la siguiente manera:

Figura 53. Ejemplo de programación de funciones con retorno.

IMPORTANTE. Si declaramos una variable, dentro de una función, esa variable será local y solo podrá ser utilizada dentro de dicha función.