Funciones y Subrutinas

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.