Enciclopedia.com

Haz Enciclopedia.com tu página de inicio y aprende algo nuevo cada día

GOTO

GOTO o GO TO (ir a en inglés) es una sentencia o instrucción muy común en los lenguajes de programación con el objetivo de controlar el flujo del programa. El efecto de su versión más simple es transferir sin condiciones la ejecución del programa a la etiqueta o número de línea especificada. Es una de las operaciones más primitivas para transpasar el control de una parte del programa a otra; tal es así que muchos compiladores traducen algunas sentencias de control como GOTO.

La instrucción se puede encontrar en muchos lenguajes; uno de los primeros lenguajes de alto nivel que lo incluyeron fue el FORTRAN, desarrollado en 1954. También se lo encuentra en: Algol, COBOL, SNOBOL, BASIC, Lisp, C, C++, Pascal y Perl entre otros, especialmente el lenguaje ensamblador. En este último se lo puede encontrar como BRA (de branch: ramificar en inglés), JMP o JUMP (saltar o salto en inglés) y es, generalmente, el único modo de organizar el flujo del programa.

Existe incluso en lenguajes usados para la enseñanza de programación estructurada, como Pascal. Sin embargo, no está en todos los lenguajes de programación, en algunos (como Java) es una palabra reservada y en el paródico leguaje INTERCAL se utiliza COME FROM (venir de en inglés).

Se pueden encontrara también variaciones de la sentencia GOTO. En BASIC, la sentencia ON GOTO puede seleccionar de una lista de diferentes puntos del programa a los que saltar. Podría ser interpretado como un antecesor de la sentencia switch/case. También, en FORTRAN y algunas versiones de BASIC la línea a la que saltar podía ser indicada mediante una expresión aritmética. Esto último era evitado ya que el código se hacía aún más ilegible teniendo en cuenta la necesidad de hacer los cálculos de la expresión de control para saber el destino del flujo del programa.

Controversia generada

A diferencia de la llamada a una función, no se requiere ningún tipo de preparación o estructura de código para utilizar un GOTO. Como resultado, es más sencillo obtener código inconsistente, incompleto o complicado de mantener. Justamente por ello en los años 60 y 70, cuando surgió la programación estrucutarada++, la comunidad informática se expresó a favor de otras sentencias de control ([[if ó bucles for y do/while) en lugar del GOTO.

Tal creencia está tan arraigada que el GOTO es muy criticado por los dedicados a la enseñanza de la programación, que lo suelen desaconsejar. Por el otro lado, algunos que si bien admiten el uso de un GOTO como una práctica desaconsejable, reconocen que éste es la mejor opción para algunas pocas tareas puntuales en algunos lenguajes de programación (manejo de excepciones por ejemplo). Además, por lo general se programan macros o equivalentes para evitar la utilización del GOTO.

Una crítica famosa a la sentencia en cuestión es una carta redactada por Edsger Dijkstra llamada "Go To Statement Considered Harmful" (Sentencia Go To Considerada Dañina). En ella Dijkstra argumenta que el uso irrestricto del GOTO debería ser prohibido en lenguajes de alto nivel ya que dificultan el análisis y la verificación de la correción de los programas (especialmente aquellos que contienen ciclos). Por el otro lado, Donald Knuth en su libro "Structured Programming with goto Statements" (Programación estructurada con sentencias Goto), toma en cuenta ciertas situaciones en las que el GOTO sería la sentencia a utilizar. Por lo general, éstas son situaciones en las que una estructura de programación en particular no se encuentra disponible y el GOTO puede simularla eficientemente.

Ejemplos

En Pascal, donde se deben decarar las etiquetas con la palabra reservada LABEL:

  Program UsoGOTO (input, output);
     LABEL
        Salto;
     BEGIN
        Writeln('Como estamos antes del GOTO esto saldrá en pantalla');
        GOTO Salto;
        Writeln('Esto no saldrá en pantalla');
        Salto:
        Writeln('Se efectuó una ruptura en el flujo debido a la sentencia GOTO')
     END.






This article is from Wikipedia.The text is available under the terms of the GNUs Free Documentation License.