robot de la enciclopedia para niños

GOTO para niños

Enciclopedia para niños
Archivo:GOTOkey(ZXSpectrum)
Tecla "GOTO" en la computadora doméstica ZX Spectrum de 1982, que permitía escribir comandos con una sola tecla.

GOTO (que significa "ir a" en inglés) es una instrucción especial que se usa en algunos lenguajes de programación. Imagina que estás leyendo un libro y, de repente, una nota te dice: "Ve a la página 50". Eso es lo que hace GOTO en un programa: le dice a la computadora que salte a un punto específico del código y continúe ejecutando las instrucciones desde allí.

El lugar al que salta GOTO se llama "etiqueta". Es como un marcador en el código. Cuando la computadora encuentra un GOTO, deja de hacer lo que estaba haciendo y va directamente a la etiqueta indicada. Es un salto "incondicional", lo que significa que siempre salta, sin importar nada más.

Aunque GOTO fue muy usado al principio de la programación, hoy en día se usa menos en los lenguajes de alto nivel. Esto se debe a que puede hacer que el programa sea difícil de entender y seguir. Es como si en tu libro, en lugar de ir de página en página, tuvieras que saltar constantemente de un lado a otro.

Actualmente, la idea de "saltar" sigue existiendo en la programación, pero de formas más organizadas. Por ejemplo, se usa para salir de un bucle o de una estructura de control de forma ordenada, en lugar de saltar a cualquier parte.

¿Por qué GOTO es menos usado ahora?

La historia de GOTO en la programación

Hace muchos años, cuando las computadoras empezaban, GOTO era una de las pocas formas de controlar cómo se ejecutaba un programa. Los programadores usaban GOTO para mover el flujo del programa de un lado a otro. Era como el único camino disponible.

Sin embargo, pronto se dieron cuenta de que usar GOTO sin control podía convertir el código en un verdadero lío. Imagina un plato de espagueti: todos los hilos se cruzan y es difícil seguir uno solo. A esto se le llamó "código espagueti". Era muy difícil de leer, entender y corregir errores.

Por eso, en los años 60, los expertos en programación desarrollaron algo llamado programación estructurada. Esta forma de programar busca organizar el código de manera lógica, usando bloques y estructuras claras, como los bucles (FOR, WHILE) y las condiciones (IF...THEN...ELSE). Estas nuevas formas de control hacen que el programa sea mucho más fácil de seguir y mantener.

Aunque los compiladores (programas que traducen el código a un lenguaje que la computadora entiende) todavía tienen la capacidad de usar GOTO, la mayoría de los programadores prefieren no usarlo, o lo usan solo en situaciones muy específicas y controladas.

Variaciones de GOTO

Existen algunas variaciones de la instrucción GOTO. Por ejemplo, en el lenguaje BASIC, había una instrucción llamada ON GOTO. Esta permitía elegir entre varias etiquetas a las que saltar, dependiendo de un valor. Es un poco como lo que hoy conocemos como la instrucción switch/case, que te permite elegir diferentes caminos según una condición.

GOTO y otras instrucciones de control

GOTO es una instrucción de salto incondicional, lo que significa que siempre salta a un punto específico. Esto puede hacer que sea difícil entender por qué el programa saltó allí. Las estructuras de control modernas, como los bucles y las condiciones, son más claras porque el salto o la acción se basan en reglas lógicas.

GOTO vs. GOSUB

Una instrucción similar a GOTO es GOSUB (que significa "ir a subrutina"). La gran diferencia es que GOSUB no solo salta a un lugar, sino que también "recuerda" de dónde vino. Cuando encuentra la instrucción RETURN, vuelve al punto exacto donde estaba antes de saltar.

Imagina que GOTO es como saltar de un trampolín sin saber dónde vas a caer, mientras que GOSUB es como saltar a una piscina y saber que, al terminar, volverás al borde del trampolín. GOSUB es más organizado porque define un inicio y un final claros para un grupo de instrucciones.

GOTO vs. IF...THEN...ELSE

La instrucción IF...THEN...ELSE es muy diferente de GOTO. Mientras que GOTO salta sin preguntar, IF...THEN...ELSE solo salta o ejecuta ciertas instrucciones si se cumple una condición. Por ejemplo, "SI hace sol, ENTONCES salimos a jugar, SI NO, nos quedamos en casa". Esto hace que el código sea mucho más fácil de entender, porque sabes exactamente cuándo y por qué se tomará una decisión.

Ejemplos de GOTO

Aquí puedes ver cómo se usa GOTO en algunos lenguajes de programación.

Pascal

En Pascal, debes declarar las etiquetas con la palabra `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.

Pauscal

En Pauscal, se usa la instrucción IrHacia (GoTo en español) y se declara una etiqueta:

  Var i:Entero
  Etiqueta:
  i = i + 1
  IrHacia Etiqueta

C#

En Lenguaje de programación C#, las etiquetas se declaran con dos puntos al final:

static void main()
{
:etiqueta: //La etiqueta
:goto etiqueta; //Ir a la etiqueta
}

Basic

En BASIC, las etiquetas también llevan dos puntos al final:

:PRINT "Prueba de GOTO en QBASIC"
:GOTO prueba
:PRINT "Esto no se ve porque hemos saltado a la etiqueta llamada prueba"
:prueba:
:PRINT "GOTO realizado correctamente!"

En algunas versiones de BASIC, como Just BASIC o Liberty BASIC, se usan corchetes `[` y `]` para las etiquetas:

:PRINT "Prueba de GOTO en QBASIC"
:GOTO [prueba]
:PRINT "Esto no se ve porque hemos saltado a la etiqueta llamada prueba" [prueba]
:PRINT "GOTO realizado correctamente!"

Ensamblador

En ensamblador, que es un lenguaje de muy bajo nivel, se usan instrucciones similares como `jmp`:

# Programa para GNU/Linux.
# Ensamblar con cc jmp.S -o jmp
# Muestra "Comenzando bucle" y seguidamente entra en un bucle
# mostrando "Hola, mundo" a cada iteración
    .section .rodata
    msg1:
        .string "Hola, mundo"

    msg2:
        .string "Comenzando bucle"
    .section .text
    .globl main

main:
    movl $msg2,(%esp)
    call puts
etiqueta:
    movl $msg,(%esp)
    call puts
    jmp etiqueta

Galería de imágenes

Véase también

Kids robot.svg En inglés: Goto Facts for Kids

kids search engine
GOTO para Niños. Enciclopedia Kiddle.