Libro “GAMBAS, programación visual con Software Libre”, de la editorial EDIT LIN EDITORIAL S.L., cuyos autores son Daniel Campos Fernández y José Luis Redrejo.
Libro “Fundamentos de programación”, de la editorial Univ. Politécnica de Valencia, cuyos autores son Mª Alpuente Fresnedo y otros.
Contenidos
1. Subrutinas y funciones
Es impensable escribir todo el código de un programa sin una mínima organización. En BASIC el código se organiza dividiéndolo en procedimientos que pueden ser llamados varias veces, con lo que se puede reutilizar su código si está bien pensado. Existen dos tipos de procedimientos: subrutinas y funciones.
2. Subrutinas (o procedimientos)
Una subrutina es un procedimiento que ejecuta algo, pero no devuelve ningún valor. Ejemplos de subrutinas: serían procedimientos para dibujar algo en la pantalla, tocar un sonido, etc.
La sintaxis para declarar las subrutinas es:
(PUBLIC | PRIVATE) SUB nombre_de_la_subrutina (p1 As Tipo_de_Variable, p2 As Tipo_de_Variable, ... )
[…] código que ejecuta la subrutina
END
Las palabras PUBLIC y PRIVATE significan exactamente lo mismo que cuando se definen variables: determinan si la subrutina puede ser llamada sólo desde el archivo donde se ha codificado (PRIVATE) o desde cualquier archivo de la misma aplicación (PUBLlC).
Las variables p1, p2, etc., permiten pasarle parámetros a la subrutina, que se comportarán dentro de ella como variables declaradas dentro de la propia subrutina. Es decir, desaparecerán al ejecutar el END final. Se pueden pasar tantos parámetros como se desee a una subrutina, declarándolos todos, por supuesto.
Existen algunas subrutinas con nombres especiales en Gambas, por lo que el programador no debe usar esos nombres. Éstas son las siguientes:
Main. Existe en todas las aplicaciones de Gambas que sean de texto, no en las gráficas. Es el punto por el que empieza a ejecutarse el programa. Si no hubiera subrutina Main, Gambas daría un mensaje de error al intentar arrancar, puesto que no sabría por dónde comenzar.
_New y _Free. Se ejecutan, respectivamente, al crearse y destruirse un objeto. Sólo se encuentran en los archivos de clase.
Objeto_Evento. Se ejecutan automáticamente cuando al Objeto le ocurre el Evento. Ya hemos visto algún ejemplo, como btnSalir_Click(), que se ejecuta cuando el usuario de la aplicación hace clic con el ratón sobre el botón btnSalir. En las aplicaciones gráficas, el evento Open del formulario con el que se inicia la aplicación es la primera subrutina que el programa ejecutará.
Ejercicio
Vamos a implementar nuestra primera subrutina.
Abrimos Gambas.
Hacemos clic en la opción Nuevo proyecto.
Marcamos la opción Aplicación de consola y hacemos clic en el botón Siguiente.
Seleccionamos en nuestro directorio personal el directorio BASIC/3MEDIO creado anteriormente Documentos/BASIC/3MEDIO.
Hacemos clic en el botón Siguiente.
Le damos un nombre y título al proyecto. En el primer campo escribimos “04ProcFunc”. En el segundo campo escribimos “Proyecto subrutinas y funciones”. El asistente creará un nuevo directorio con el nombre del proyecto (campo 1) y ahí irá introduciendo todos los archivos necesarios para el desarrollo de la aplicación.
Hacemos clic en OK.
Vamos a crear un núevo módulo para nuestro programa.
Hacemos clic con el botón derecho del ratón sobre el árbol de carpetas. Aparecerá un menú contextual. Elegimos la opción Nuevo→Módulo.
Surgirá una ventana en la que escribimos el nombre del Módulo: “SubMediaArit”. Pulsamos el botón OK.
Hacemos clic con el botón derecho del ratón sobre el nuevo módulo y marcamos la opción Clase de inicio.
Escribimos el siguiente código:
Ejecutamos el programa.. El resultado debe ser el siguiente:
Aunque este programa es poco útil, sirve para aprender con simplicidad la forma de funcionar de las subrutinas. Comienza ejecutando la subrutina Main, en ella sólo hay una llamada a ejecutar la subrutina pinta_media pasándole los números enteros 4 y 8 como parámetro. La subrutina pinta_media muestra en la consola el resultado de hacer la media entre los dos valores que han sido pasados como parámetros.
Sube el fichero llamado SubMediaArit.module que podrás encontrar dentro de la carpeta del proyecto Documentos/BASIC/3MEDIO/04ProcFunc.
Contenidos
3. Funciones
Una función es un procedimiento que devuelve siempre un valor al terminar su ejecución. Ejemplos de función serían el cálculo de una operación matemática que devuelve un resultado, el proceso para pedir datos al usuario de la aplicación, etc.
La sintaxis para declarar una función es la siguiente:
(PUBLIC|PRIVATE) FUNCTION Nombre_función (p1 As Tipo_de_Variable, p2 As Tipo_de_Variable, ... ) As Tipo_de_Dato
[…] código que ejecuta la función
RETURN resultado_de_ejecutar la función
END
La declaración es casi idéntica a la de la subrutina, añadiendo dos cosas más: el tipo de dato que la función devuelve en la primera línea y la necesidad de usar la sentencia RETURN de BASIC para indicar el valor a devolver.
Ejercicio
Vamos a implementar nuestra primera función. Seguimos con el proyecto anterior. Vamos a crear un nuevo módulo para nuestro programa.
Hacemos clic con el botón derecho del ratón sobre el árbol de carpetas. Aparecerá un menú contextual. Elegimos la opción Nuevo→Módulo.
Surgirá una ventana en la que escribimos el nombre del Módulo: “FuncMediaArit”. Pulsamos el botón OK.
Hacemos clic con el botón derecho del ratón sobre el nuevo módulo y marcamos la opción Clase de inicio.
Escribimos el siguiente código:
Ejecutamos el programa.. El resultado debe ser el siguiente:
En esta ocasión es la subrutina Main la que se encarga de pintar en la consola el resultado de la operación. Es muy importante destacar la diferencia entre la forma en que se llama a una subrutina y cómo se llama a una función.
En el ejemplo anterior vimos que para llamar a la subrutina sólo se escribía su nombre con sus parámetros entre paréntesis. Sin embargo, ahora vemos que al llamar a la función se usa una asignación final = calcula_Media(4, 8).
Esto debe hacerse siempre al llamar a una función: la asignación sirve para recoger el valor que se devuelve. Por motivos obvios, la variable que recoge el valor que la función retorna debe declararse del mismo tipo de dato que el que devuelve la función . En el ejemplo anterior la función devuelve un dato tipo Single (un número real con decimales) y la variable final se ha declarado, por tanto, de tipo Single.
Sube el fichero llamado FuncMediaArit.module que podrás encontrar dentro de la carpeta del proyecto Documentos/BASIC/3MEDIO/04ProcFunc.
Contenidos
4. Alcance de las variables
Hay dos lugares donde se pueden declarar las variables, dependiendo del ámbito en el que se vayan a usar:
Si se declaran dentro de una subrutina o función están disponibles para ser usadas sólo dentro de esa subrutina o función.
Si se declaran al principio del archivo de código (por ejemplo un Módulo) están disponibles para todo el código de ese archivo, en todas sus subrutinas.
Para declarar una variable en una subrutina o función se emplea la sinta xis:
DIM nombre_variable AS tipo_variable
El tipo_variable hace referencia al tipo de dato de la variable: número entero, cadena de texto, número decimal, etc. El nombre de la variable lo elige el programador libremente. Siempre es recomendable que sea algo que indique para qué se va a usar la variable. Es decir, se debe huir de nombres como a, b, c. etc., y usar, por ejemplo, edad, fecha_nacimiento, altura, etc.
Las variables que se declaren en una subrutina o función sólo se usarán dentro de ellas. Cuando terminen se destruirán. Eso permite utilizar el mismo nombre de variable dentro de distintas subrutinas y su valor nunca se confundirá o mezclará.
Ejercicio
Vamos a crear un nuevo módulo para practicar con el alcance de las variables.
Hacemos clic con el botón derecho del ratón sobre el árbol de carpetas. Aparecerá un menú contextual. Elegimos la opción Nuevo→Módulo.
Surgirá una ventana en la que escribimos el nombre del Módulo: “AlcanceVariables”. Pulsamos el botón OK.
Hacemos clic con el botón derecho del ratón sobre el nuevo módulo y marcamos la opción Clase de inicio.
Escribimos el siguiente código:
Ejecutamos el programa.. El resultado debe ser el siguiente:
Para entender bien lo que está sucediendo crea puntos de interrupción y utiliza el depurador para comprobar el valor que van tomando las variables.
En este ejemplo vemos que las variables edad y altura se pueden usar en todo el archivo. Por tanto, después de ejecutar la Subrutina1, edad valdrá 30 y, después de ejecutar la Subrutina2 valdrá 32.
Vemos también cómo la variable num está definida en las dos subrutinas. El valor de num desaparece al acabar cada una de las subrutinas y, por tanto, durante Subrutina1 valdrá 54 y durante Subrutina2 valdrá 4, pero después de que se ejecute el END de cada una de esas dos subrutinas, simplemente no existirá y si se hace referencia a num en cualquier otro punto del programa se producirá un error.
Sube el fichero llamado AlcanceVariables.module que podrás encontrar dentro de la carpeta del proyecto Documentos/BASIC/3MEDIO/04ProcFunc.
Sugerencias
Sería interesante que te guardaras en una memoria USB todo el contenido de la carpeta BASIC de tus documentos, para evitar que cualquier problema con el ordenador te haga perder tus ejercicios.
No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.
Los reconocimientos se realizan en el apartado Fuentes de información.
Todas las capturas de pantalla tienen copyright y pertenecen a TuInsitutoOnline.com.
TuInstitutoOnline.com permite su uso siempre y cuando se muestren desde el dominio www.tuinstituoonline.com y NO PERMITE enlazar a ellas desde otros lugares.
Además, la estructura diseñada para mostrar el contenido de las unidades es propiedad de TuInstitutoOnline.com.