Ir


GoTo ( goto , GOTO , GO TO u otras combinaciones de mayúsculas y minúsculas, según el lenguaje de programación) es una declaración que se encuentra en muchos lenguajes de programación de computadoras . Realiza una transferencia de control unidireccional a otra línea de código; por el contrario, una llamada de función normalmente devuelve el control. Las ubicaciones saltadas generalmente se identifican mediante etiquetas , aunque algunos idiomas usan números de línea . A nivel de código de máquinagoto , a es una forma de declaración de salto o rama , en algunos casos combinada con un ajuste de pila. Muchos idiomas admiten lagotodeclaración, y muchos no lo hacen (ver § soporte de idiomas ).

El teorema del programa estructurado demostró que el gotoenunciado no es necesario para escribir programas que puedan expresarse como diagramas de flujo ; alguna combinación de las tres construcciones de programación de secuencia, selección/elección y repetición/iteración son suficientes para cualquier cálculo que pueda realizar una máquina de Turing , con la advertencia de que es posible que sea necesario introducir duplicación de código y variables adicionales. [1]

En el pasado hubo un debate considerable en la academia y la industria sobre los méritos del uso de gotodeclaraciones. Anteriormente, el uso de goto era común, pero desde el advenimiento de la programación estructurada en las décadas de 1960 y 1970, su uso ha disminuido significativamente. La principal crítica es que el código que usa sentencias goto es más difícil de entender que las construcciones alternativas. Goto permanece en uso en ciertos patrones de uso comunes , pero generalmente se usan alternativas si están disponibles. Los debates sobre sus usos (más limitados) continúan en los círculos académicos y de la industria del software.

La gotodeclaración a menudo se combina con la declaración if para provocar una transferencia de control condicional.

Los lenguajes de programación imponen diferentes restricciones con respecto al destino de una gotosentencia. Por ejemplo, el lenguaje de programación C no permite un salto a una etiqueta contenida dentro de otra función, [2] sin embargo, los saltos dentro de una sola cadena de llamadas son posibles usando las funciones setjmp/longjmp .

En la reunión previa a ALGOL celebrada en 1959 , Heinz Zemanek puso en duda explícitamente la necesidad de declaraciones GOTO; en ese momento nadie [ cita requerida ] prestó atención a su comentario, incluido Edsger W. Dijkstra , quien luego se convirtió en el icónico oponente de GOTO. [3] Las décadas de 1970 y 1980 vieron una disminución en el uso de declaraciones GOTO a favor del paradigma de " programación estructurada " , con goto criticado por conducir a un " código espagueti inmantenible " (ver más abajo). Algunos estándares de codificación de estilo de programación , por ejemplo, los estándares de codificación GNU Pascal, desaconsejan el uso de sentencias GOTO. [4]La prueba de Böhm-Jacopini (1966) no resolvió la cuestión de adoptar la programación estructurada para el desarrollo de software, en parte porque era más probable que la construcción oscureciera un programa que lo mejorara porque su aplicación requiere la introducción de variables locales adicionales. [5] Sin embargo, provocó un destacado debate entre informáticos, educadores, diseñadores de lenguajes y programadores de aplicaciones que vieron un cambio lento pero constante del uso anteriormente ubicuo de GOTO. Probablemente la crítica más famosa de GOTO es una carta de 1968 de Edsger Dijkstra llamada " Go To Statement Considered Harmful ". [3]En esa carta, Dijkstra argumentó que las declaraciones GOTO sin restricciones deberían abolirse de los lenguajes de nivel superior porque complicaban la tarea de analizar y verificar la corrección de los programas (particularmente aquellos que involucran bucles). [6] La carta en sí provocó un debate, incluida una carta "'GOTO Considerado Dañino' Considerado Dañino" [7] enviada a Comunicaciones de la ACM (CACM) en marzo de 1987, así como más respuestas de otras personas, incluido Dijkstra's On una correspondencia algo decepcionante . [8]