Diferencia entre revisiones de «GOTO»

Contenido eliminado Contenido añadido
describir goto
m Revertidos los cambios de 190.48.229.38 (disc.) a la última edición de 190.148.92.143
Línea 1:
'''GOTO''' o '''GO TO''' (''ir a'' en [[idioma inglés|inglés]]) es una [[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 (computación)|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 [[compilador]]es traducen algunas [[instrucciones de control]] como ''GOTO''.
'''NO''', Se esperaba '''Then''' o '''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|Algol]], [[COBOL]], [[SNOBOL]], [[BASIC]], [[Lisp]], [[lenguaje de programación C|C]], [[C más más|C++]], [[Lenguaje de programación Pascal|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 [[Lenguaje de programación Pascal|Pascal]]. Sin embargo, no está en todos los lenguajes de programación, en algunos (como [[Lenguaje de programación Java|Java]]) es una palabra reservada y en el paródico lenguaje [[INTERCAL]] se utiliza '''COME FROM''' (''venir de'' en inglés).
 
Se pueden encontrar también variaciones de la instrucción ''GOTO''. En BASIC, la instrucción ''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 instrucción ''[[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 1960|años 60]] y [[años 1970|70]], cuando surgió la [[programación estructurada]], la comunidad informática se expresó a favor de otras instrucciones de control ([[if]] ó [[bucle]]s [[for]] y [[do]]/[[while]]) en lugar de ''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 [[macro]]s o equivalentes para evitar la utilización de GOTO.
 
Una crítica famosa a la instrucción en cuestión es una carta redactada por [[Edsger Dijkstra]] llamada ''"Go To Statement Considered Harmful"'' (''Instrucción Go To Considerada Dañina''). En ella Dijkstra argumenta que el uso irrestricto de ''GOTO'' debería ser prohibido en lenguajes de alto nivel ya que dificultan el análisis y la verificación de la [[correcció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 instrucciones Goto''), tiene en cuenta ciertas situaciones en las que se utilizaría ''GOTO''. Por lo general, se trata de situaciones en las que una estructura de programación en particular no está disponible y ''GOTO'' puede simularla eficientemente.
 
==Ejemplos==
En Pascal, donde se deben declaran las etiquetas con la palabra reservada ''LABEL'':
 
<blockquote>
Program UsoGOTO (input, output);<br/>
uses crt;
var
salto:char;
LABEL<br/>
Salto;<br/>
BEGIN<br/>
Writeln('Como estamos antes del GOTO esto saldrá en pantalla');<br/>
GOTO Salto;<br/>
Writeln('Esto no saldrá en pantalla');<br/>
Salto:<br/>
Writeln('Se efectuó una ruptura en el flujo debido a la sentencia GOTO')<br/>
END.
</blockquote>
 
En [[Lenguaje de programación C|C]] se declaran las etiquetas con dos puntos al final.
 
<blockquote>
#include <stdio.h><br/>
int main()<br/>
{<br/>
etiqueta: //La etiqueta<br/>
printf("Uso del GOTO");<br/>
goto etiqueta;<br/>
}
</blockquote>
 
== Véase también ==
 
* [[Estructuras de control]]
* [[Bucle]]
* [[Bucle for]]
* [[Bucle while]]
* [[Bucle repetir]]
* [[Ciclo infinito]]
* [[Teorema del programa estructurado]]
* [[Programación estructurada]]
* [[Lenguaje de programación]]
 
[[Categoría:Estructuras de control]]
 
[[ca:GOTO]]
[[de:Sprunganweisung]]
[[en:Goto]]
[[fr:Goto]]
[[he:פקודת goto]]
[[it:GOTO]]
[[ja:Goto文]]
[[ko:GOTO문]]
[[nl:GOTO]]
[[pl:Goto]]
[[pt:Goto (programação)]]
[[ru:GOTO]]
[[sh:GoTo]]
[[sv:Goto]]
[[tr:GOTO]]
[[uk:Безумовний перехід]]
[[zh:Goto]]