Funciones y Subrutinas
Programar requiere algún tipo de organización en la escritura de código. No organizar de alguna forma el código que se escribe solo dificulta la lectura y modificación
del mismo para el programador.
Organizar el código tiene muchas ventajas, una muy importante es la reusabilidad del código. Es común que al escribir algún programa existas operaciones que se requieren
repetir en diversas secciones del código, con diferentes parámetros. Resultaría impráctico e ineficiente escribir una y otra vez el fragmento de código cada vez que se
necesite, en lugar de eso es útil escribir ese código en una parte especial del programa y mandarlo llamar cada vez que se necesite, incluso con parámetros diferentes.
A esto se le conoce como reutilización de código.
En Gambas el código se organiza dividiéndolo en procedimientos. Existen dos tipos de procedimientos: subrutinas y funciones.
Subrutinas
Una subrutina es un procedimiento que ejecuta cierta acción y obtiene un resultado. Las subrutinas pueden o no recibir parametros para su ejecución y no
devuelven un resultado.
La sintáxis para escribir una subrutina es la siguiente:
Public Sub nombreSubrutina (p1 As Tipo_variable, p2 As Tipo_variable, ...)
código que ejecuta la subrutina
End
Observe que la sintaxis de la subrutina requiere de un nombre único con el que se identificará dentro del programa. Opcionalmente
se le puede enviar algún parámetro el cual la subrutina lo recibe con las variables que se declaran dentro de los paréntesis
que están inmediatamente despues del nombre. El código que forma parte de la subrutina se debe escribir hasta antes de la palabra
clave End
.
El código de la subrutina debe escribirse al final del programa, justo después de que termina la rutina principal.
Ejemplo. Esta Subrutina calcula el promedio de dos números que recibe como argumento.
Public Sub Main()
media(4,8)
End
Public Sub media(valor1 As Integer, valor2 As Integer)
Print (valor1 + valor2) / 2
End
El programa funciona de la siguiente forma: La rutina principal incia y cuando la ejecución alcanza la líena donde se ecuentra
media(4,8)
, Gambas busca una función o subrutina que se haya declarado al final de la rutina principal y brinca
la ejecución hasta ese punto del programa. Al brincar, se envían los números 4
y 8
como argumentos de
la subrutina.
Ya en la subrutina, se reciben los dos números 4
y 8
como argumentos y se almacenan en las variables
valor1
y valor2
respectivamente. Observe que en ese momento se convierte ese argumento al tipo de dato
que se delcara en la subrutina, en este caso Integer
. Por esta razón si el argumento no fuera entero, se convertiría
a Integer
al guardarse en la variable.
Dentro de la subrutina se realiza el cálculo y la impresión del resultado. Una vez que se alcanza el End
de la subrutina,
se brinca de vuelta al punto donde ésta fue llamada y como ya no hay más intrucciones se completa así la ejecución del programa.
Las variables valor1
y valor2
solamente existen dentro de la subrutina. Esto sigifica que cuando se manda
llamar la subrutina, se declaran tales variables y ellas solo existen en el ámbito de la subrutina. Una vez que termina la
ejecución de la subrutina estas variables se destruyen. A este tipo de variables se les llama variables locales.
Es posible que una subrutina llame a otras subrutinas a su vez, incluso puede llamarse a sí misma.
Funciones
Una función es un procedimiento que ejecuta cierta acción y obtiene un resultado. Las funciones pueden o no recibir parametros para su ejecución y pueden
o no devolver algún resultado.
La sintáxis para escribir una función es la siguiente:
Public Function nombreFuncion (p1 As Tipo_variable, p2 As Tipo_variable, ...) As tipoDato
código que ejecuta la función
Return
End
La sintaxis de la función requiere de un nombre único con el que se identificará dentro del programa. Opcionalmente
se le puede enviar algún parámetro el cual la función lo recibe con las variables que se declaran dentro de los paréntesis
que están inmediatamente despues del nombre. El código que forma parte de la función se debe escribir hasta antes de la palabra
clave End
.
Tal como la subrutina, el código de la función deberá escribirse después de la rutina principal.
Ejemplo. Esta Función calcula el promedio de dos números que recibe como argumento.
Public Sub Main()
dim x as Float
x = media(4,8)
Print "El promedio es: "; x
End
Public Function media(valor1 As Integer, valor2 As Integer) As Float
dim p as Float
p = (valor1 + valor2) / 2
Return p
End
El programa funciona de la siguiente forma: La rutina principal incia, se declara la variable x
y cuando la
ejecución alcanza la líena donde se ecuentra x = media(4,8)
, Gambas busca una función o subrutina que se
haya declarado al final de la rutina principal y brinca la ejecución hasta ese punto del programa. Al brincar, se envían
los números 4
y 8
como argumentos de la subrutina.
Una vez que la ejecución llegó a la función, se reciben los dos números 4
y 8
como argumentos y
se almacenan en las variables locales valor1
y valor2
respectivamente. Observe que en ese momento se
convierte ese argumento al tipo de dato que se delcara en la función, en este caso Integer
. Por esta razón si el
argumento no fuera entero, se convertiría a Integer
al guardarse en la variable.
En la función se declara la variable local p
como Float
. Luego se realiza el cálculo y se almacena en
la variable p
. Posteriomente se invoca a la instrucción Return
, la cual se encarga de devolver el contenido de la
variable que se le pasa como argumento, en este caso p
. Return
devuelve el contenido de la variable
x
al punto donde fue invocada la función, en este caso ese valor se almacena en la variable local x
de la subrutina principal.
Las variables valor1
y valor2
solamente existen dentro de la función. Esto sigifica que cuando se manda
llamar la función, se declaran tales variables y ellas solo existen en el ámbito de la función. Una vez que termina la
ejecución de la función estas variables se destruyen. A este tipo de variables se les llama variables locales.
Es posible que una función llame a otras subrutinas o funciones a su vez, incluso puede llamarse a sí misma.
Nota Importante: Los arreglos y objetos siempre se pasan por referencia. Es decir, si se pasa como parámetro un arreglo
de elementos Integer
a una función, al modificarlo dentro de la función, se verá modificado el original.