Diferencia entre revisiones de «GOTO»

De Wikipedia, la enciclopedia libre
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: 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]]

Revisión del 07:42 26 sep 2009

GOTO o GO TO (ir a en 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 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 instrucciones 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 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 60 y 70, cuando surgió la programación estructurada, la comunidad informática se expresó a favor de otras instrucciones de control (if ó bucles 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 macros 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:

Program UsoGOTO (input, output);
uses crt; var salto:char; 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.

En C se declaran las etiquetas con dos puntos al final.

  1. include <stdio.h>

int main()
{
etiqueta: //La etiqueta
printf("Uso del GOTO");
goto etiqueta;
}

Véase también