GOSUB , la enciclopedia libre

GOSUB o GO SUB es un comando que usan muchas versiones de lenguajes de programación BASIC. GOSUB es un salto a una subrutina donde se ejecutan varias sentencias de código. La subrutina está señalada por una etiqueta como punto de entrada y finaliza al encontrar la primera sentencia RETURN, devolviendo el control a la instrucción que sigue a la que invocó la subrutina.

En algunas versiones de BASIC, GOSUB acepta parámetros de llamada, pero no es lo frecuente. La utilidad del comando GOSUB es que permite ejecutar el mismo código en diferentes momentos (a diferencia de los bucles, que lo hacen de forma seguida), evitando con ello duplicar código. También permite separar las funciones específicas del programa por un lado, y por otro el control de la ejecución del programa, quedando esta parte más escueta y legible.[1]

Modo de invocación

[editar]

GOSUB siempre hace referencia a una etiqueta que debe existir. La etiqueta, a su vez, es una constante cuyo contenido aloja una dirección de memoria que es relativa respecto de la ubicación del programa.

GOSUB Etiqueta 
IF X = 5 THEN GOSUB Etiqueta 

Código de ejemplo con una llamada

[editar]

En el ejemplo se usa un bucle para recorrer los grados de un círculo; dentro del bucle se utiliza una llamada mediante GOSUB, para calcular los radianes y presentar el resultado. En este ejemplo, todo el código contenido en la subrutina podría estar dentro del bucle y eliminar la subrutina, pero puede entenderse la utilidad de la subrutina si se necesita calcular en cualquier momento los radianes.

  CONST PI= 3.141592    Dim Radianes AS SINGLE   DIM k AS INTEGER       For k = 0 to 359         GOSUB CalculaRadian      NEXT      END    CalculaRadian:      Radianes = k / (180/PI)      PRINT k & " grados de ángulo son: " & Radianes   RETURN 

Detalles

[editar]

GOSUB realiza la misma tarea que puede realizar un método pero estando la misma dentro de un método. Es decir: es como una función dentro de otra función. Normalmente se utiliza cuando sólo una función o método requiere los servicios de la subrutina; parte del código se ejecuta varias veces, pero no de una forma seguida. Si desde varias partes del código del programa se requiere la ejecución de la subrutina, entonces dicho código debe ser un método común.

Se señalan algunos detalles a continuación:

  • Cuando se ejecuta GOSUB, se guarda en la pila la dirección de la instrucción que realiza la llamada + 1.
  • Cuando se alcanza la sentencia RETURN salta a la última posición que se localiza en la pila.
  • Las líneas de código de la llamada y las de la subrutina donde se localiza la etiqueta pueden estar en cualquier parte del código.
  • En una subrutina invocada por GOSUB puede haber tantas sentencias RETURN como se requiera y del mismo modo la subrutina puede contener tantas etiquetas como se requiera.
  • En una subrutina llamada por GOSUB, que contiene varias etiquetas, cada una de ellas puede comportarse como una subrutina, en las que todas pueden estar controladas por un mismo y único retorno y/o por otro particular.

Se ilustra este caso con un ejemplo. Obsérvese cómo todas las etiquetas están directamente retornadas con el retorno que aparece después de la etiqueta Domingo. Obsérvese también cómo la etiqueta Miércoles (y las anteriores) están controladas además por el RETURN dentro de la etiqueta Miércoles.

Ejemplo de varias etiquetas   GOSUB Lunes   END     Lunes:       ' instrucciones    Martes:       ' instrucciones    Miércoles:       IF X = 5 THEN            GOSUB Viernes       ELSE            RETURN       END IF    Jueves:       ' instruccciones    Viernes:       ' instruccciones    Sábado:       ' instruccciones    Domingo:       ' instruccciones    RETURN 

Implementación

[editar]

GOSUB puede ser implementado fácilmente con funciones de salto. En pseudocodigo.

    Guardar Puntero + 1 actual en la pila     Saltar a la dirección que indica Etiqueta     Instrucción, punto de Retorno donde regresa después de ejecutarse la subrutina. 
    Etiqueta posición donde se localiza, la subrutina       ... instrucciones a ejecutarse     Saltar a la última dirección de la pila 

Véase también

[editar]

Referencias

[editar]
  1. «GOSUB...RETURN Detalles del comando.». Microsoft. 1988. Archivado desde el original el 4 de abril de 2009. Consultado el 4 de julio de 2008.