Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

GOTO y GOSUB
#1

Hola.

¿Alguien usa las sentencias GOTO, GOSUB, ON GOTO y ON GOSUB? Entiendo el funcionamiento, o eso creo, pero no le veo ninguna ventaja,  en vez de usar funciones o métodos. ¿O es por mantener esas palabras del Basic original que tanto dolor de cabeza provocaron?

Un saludo.
    ¡Gracias!
#2

(09-05-2023, 23:21)guizans escribió:  ¿Alguien usa las sentencias GOTO, GOSUB, ON GOTO y ON GOSUB?

yo no las uso nunca

1 Saludo.
    ¡Gracias!
#3

Yo nunca las he usado, pero escarbando en el código fuente de Gambas a veces me las he encontrado por ahí. Por ejemplo en el código de Gridview... de hace algunas versiones. Creo que se actualizó y no sé si ahora mismo lo conserva, pero lo tenía.

Son un dolor de culo, que dicen los anglos, pero también son herramientas parte del lenguaje. Si hay quien los usa y le valen... pues bendito sea.


Saludos

Este el el resultado del comando "grep -R GO\ TO" en el raíz de los fuentes de gambas 3.18.2

gb.form.htmlview/src/gumbo/parser.c:// GOTOs in the spec to reasonably structured programming.
comp/src/gb.eval.highlight/sql/keywords:GOTO
comp/src/gb.web/.src/FileSessionManager.class:  'IF ReadValue() = 1 THEN GOTO _ABANDON
comp/src/gb.web/.hidden/Session_opt:  'IF ReadValue() = 1 THEN GOTO _ABANDON
app/src/gambas3-selftest/SearchList:GOTO
app/src/gambas3/.src/Editor/Form/FProperty.class~:  'IF NOT $hForm THEN RETURN 'GOTO _HIDE
app/src/gambas3/.src/Editor/Form/CControl.class:    '    GOTO _SUIVANT
app/src/gambas3/.src/Editor/Form/CControl.class~:    '    GOTO _SUIVANT
app/src/gambas3/.src/Editor/Form/FProperty.class:  'IF NOT $hForm THEN RETURN 'GOTO _HIDE
app/src/gambas3/.src/Editor/Code/FEditor.class:  '  GOTO RETURN_FUNCTION
app/src/gambas3/.src/Editor/Code/FEditor.class:      If aSymbols[iCpt - 1] == "GOTO" Or If aSymbols[iCpt - 1] == "GOSUB" Then
app/src/gambas3/.src/FMain.class:      If Key.Control Then GoSub GOTO_TOP
app/src/gambas3/.src/FMain.class:      If Key.Control Then GoSub GOTO_BOTTOM
app/src/gambas3/.src/FMain.class:GOTO_TOP:
app/src/gambas3/.src/FMain.class:GOTO_BOTTOM:
app/src/gambas3/.src/FMain.class~:      If Key.Control Then GoSub GOTO_TOP
app/src/gambas3/.src/FMain.class~:      If Key.Control Then GoSub GOTO_BOTTOM
app/src/gambas3/.src/FMain.class~:GOTO_TOP:
app/src/gambas3/.src/FMain.class~:GOTO_BOTTOM:
app/src/gambas3/.src/Util/MErrorMessage.moduleTonguerivate Const ERR_101 As String = ("Forbidden GOTO")
grep: app/src/gambas3/.gambas/MERRORMESSAGE: coincidencia en fichero binario
grep: app/src/gambas3/.gambas/FEDITOR: coincidencia en fichero binario
app/src/gambas3/.lang/ar.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/ca.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/ca.po:msgstr "GOTO prohibit"
grep: app/src/gambas3/.lang/zh_TW.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/el.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/ru.mo: coincidencia en fichero binario
app/src/gambas3/.lang/it.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/it.po:msgstr "Proibito GOTO"
app/src/gambas3/.lang/fr.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/fr.po:msgstr "GOTO interdit"
grep: app/src/gambas3/.lang/it.mo: coincidencia en fichero binario
app/src/gambas3/.lang/gl_ES.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/zh.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/zh.po:msgstr "禁止GOTO"
app/src/gambas3/.lang/id.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/hu.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/nl.mo: coincidencia en fichero binario
app/src/gambas3/.lang/ru.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/ru.po:msgstr "GOTO запрещён"
app/src/gambas3/.lang/MErrorMessage.pot:msgid "Forbidden GOTO"
app/src/gambas3/.lang/sl.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/ca.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/sv.mo: coincidencia en fichero binario
app/src/gambas3/.lang/ko.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/de.mo: coincidencia en fichero binario
app/src/gambas3/.lang/tr.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/es.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/es.po:msgstr "GOTO no permitido"
app/src/gambas3/.lang/hr.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/cs.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/cs.po:msgstr "Zakázané GOTO"
app/src/gambas3/.lang/el.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/el.po:msgstr "Απαγορευμένο GOTO"
app/src/gambas3/.lang/pt_BR.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/pt_BR.po:msgstr "GOTO proibido"
app/src/gambas3/.lang/pt.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/es_ES.mo: coincidencia en fichero binario
app/src/gambas3/.lang/de.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/de.po:msgstr "Unzulässiges GOTO"
app/src/gambas3/.lang/sv.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/sv.po:msgstr "Förbjudet GOTO"
app/src/gambas3/.lang/lt.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/es.mo: coincidencia en fichero binario
app/src/gambas3/.lang/.pot:msgid "Forbidden GOTO"
app/src/gambas3/.lang/nl.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/nl.po:msgstr "Verboden GOTO"
app/src/gambas3/.lang/cy.po:msgid "Forbidden GOTO"
grep: app/src/gambas3/.lang/fr.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/cs.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/pt_BR.mo: coincidencia en fichero binario
grep: app/src/gambas3/.lang/zh.mo: coincidencia en fichero binario
app/src/gambas3/.lang/pl.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/no.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/es_ES.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/es_ES.po:msgstr "GOTO no permitido"
app/src/gambas3/.lang/ro.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/zh_TW.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/zh_TW.po:msgstr "這裡不能使用 GOTO"
app/src/gambas3/.lang/ja.po:msgid "Forbidden GOTO"
app/src/gambas3/.lang/fa.po:msgid "Forbidden GOTO"
main/lib/jit/jit_body.c:        /* 1F ON              */  &&_ON_GOTO_GOSUB,
main/lib/jit/jit_body.c:_ON_GOTO_GOSUB:
main/lib/eval/eval_analyze.c:                else if (old_type == RT_RESERVED && (PATTERN_is(get_last_pattern(pattern), RS_GOTO) || PATTERN_is(get_last_pattern(pattern), RS_GOSUB)))
main/lib/eval/eval_read.c:    GOTO_BREAK,
main/lib/eval/eval_read.c:    GOTO_SPACE,
main/lib/eval/eval_read.c:    GOTO_NEWLINE,
main/lib/eval/eval_read.c:    GOTO_COMMENT,
main/lib/eval/eval_read.c:    GOTO_STRING,
main/lib/eval/eval_read.c:    GOTO_IDENT,
main/lib/eval/eval_read.c:    GOTO_QUOTED_IDENT,
main/lib/eval/eval_read.c:    GOTO_ERROR,
main/lib/eval/eval_read.c:    GOTO_SHARP,
main/lib/eval/eval_read.c:    GOTO_NUMBER,
main/lib/eval/eval_read.c:    GOTO_NUMBER_OR_OPERATOR,
main/lib/eval/eval_read.c:    GOTO_OPERATOR
main/lib/eval/eval_read.c:                first_car[i] = GOTO_BREAK;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_NEWLINE;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_SPACE;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_COMMENT;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_STRING;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_SHARP;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_IDENT;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_QUOTED_IDENT;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_NUMBER;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_ERROR;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_NUMBER_OR_OPERATOR;
main/lib/eval/eval_read.c:                first_car[i] = GOTO_OPERATOR;
main/share/gbc_trans_common.h:    TRANS_GOTO;
main/share/gb_reserved.h:        RS_GOTO,
main/share/gbc_read_temp.h:    else if (first_car[car] == GOTO_IDENT)
main/share/gb_type_common.h:  TK_LABEL       = 4,   /* GOTO label */
main/gbc/gbc_trans_ctrl.c:/*#define DEBUG_GOTO*/
main/gbc/gbc_trans_ctrl.cConfusedtatic TRANS_GOTO *goto_info;
main/gbc/gbc_trans_ctrl.c:    TRANS_GOTO *info;
main/gbc/gbc_trans_ctrl.c:    #ifdef DEBUG_GOTO
main/gbc/gbc_trans_ctrl.c:    else if (mode == RS_GOTO)
main/gbc/gbc_trans_ctrl.c:    // Resolve GOTOs
main/gbc/gbc_trans_ctrl.c:                        THROW("Forbidden GOTO");
main/gbc/gbc_trans_ctrl.c:                    #ifdef DEBUG_GOTO
main/gbc/gbc_trans_ctrl.c:    check_try("GOTO");
main/gbc/gbc_trans_ctrl.c:    add_goto(index, RS_GOTO);
main/gbc/gbc_trans_ctrl.c:    if (TRANS_is(RS_GOTO))
main/gbc/gbc_trans_ctrl.c:    check_try(gosub ? "ON GOSUB" : "ON GOTO");
main/gbc/gbc_trans_ctrl.c:    #ifdef DEBUG_GOTO
main/gbc/gbc_trans_code.c:        { RS_GOTO, TRANS_goto },
main/gbc/gbc_read.c:    GOTO_BREAK,
main/gbc/gbc_read.c:    GOTO_SPACE,
main/gbc/gbc_read.c:    GOTO_NEWLINE,
main/gbc/gbc_read.c:    GOTO_COMMENT,
main/gbc/gbc_read.c:    GOTO_STRING,
main/gbc/gbc_read.c:    GOTO_IDENT,
main/gbc/gbc_read.c:    GOTO_QUOTED_IDENT,
main/gbc/gbc_read.c:    GOTO_ERROR,
main/gbc/gbc_read.c:    GOTO_SHARP,
main/gbc/gbc_read.c:    GOTO_NUMBER,
main/gbc/gbc_read.c:    GOTO_NUMBER_OR_OPERATOR,
main/gbc/gbc_read.c:    GOTO_OPERATOR
main/gbc/gbc_read.c:                first_car[i] = GOTO_BREAK;
main/gbc/gbc_read.c:                first_car[i] = GOTO_NEWLINE;
main/gbc/gbc_read.c:                first_car[i] = GOTO_SPACE;
main/gbc/gbc_read.c:                first_car[i] = GOTO_COMMENT;
main/gbc/gbc_read.c:                first_car[i] = GOTO_STRING;
main/gbc/gbc_read.c:                first_car[i] = GOTO_SHARP;
main/gbc/gbc_read.c:                first_car[i] = GOTO_IDENT;
main/gbc/gbc_read.c:                first_car[i] = GOTO_QUOTED_IDENT;
main/gbc/gbc_read.c:                first_car[i] = GOTO_NUMBER;
main/gbc/gbc_read.c:                first_car[i] = GOTO_ERROR;
main/gbc/gbc_read.c:                first_car[i] = GOTO_NUMBER_OR_OPERATOR;
main/gbc/gbc_read.c:                first_car[i] = GOTO_OPERATOR;
main/gbx/gbx_exec_loop.c:        /* 1F ON              */  &&_ON_GOTO_GOSUB,
main/gbx/gbx_exec_loop.c:_ON_GOTO_GOSUB:
gb.poppler/src/c_pdf_document.cpp:        case POPPLER_ACTION_GOTO_DEST: type = "GotoDest"; break;
gb.poppler/src/c_pdf_document.cpp:        case POPPLER_ACTION_GOTO_REMOTE: type = "GotoRemote"; break;
gb.poppler/src/c_pdf_document.cpp:        case POPPLER_ACTION_GOTO_DEST: return action->goto_dest.dest;
gb.poppler/src/c_pdf_document.cpp:        case POPPLER_ACTION_GOTO_REMOTE: return action->goto_remote.dest;
gb.poppler/src/c_pdf_document.cpp:        case POPPLER_ACTION_GOTO_REMOTE: target = ACTION->goto_remote.file_name; break;


La mayoría de las coincidencias no son de código fuente de gambas, pero haberlas haylas.
O sea, que siguen vivitos y coleando...

No podemos regresar
    ¡Gracias!
#4

Goto creo que es soportado por gambas. Otra cosa es que lo usemos, en la actualidad, no creo que la usemos ninguno.

Go sub no tendría sentido ya que es una llamada a una "subrutina" (podemos llamarla procedimiento ),
finaliza el procedimiento y luego continúa en la linea siguiente donde se uso Go sub .

Digo que no tiene sentido hacerlo con Go Sub ya que lo hacemos directamente usando el nombre del procedimiento.

En su día se añadiría por compatibilidad, por recordar. Pero desde luego hoy veo un código de aquellos basic de los años 80
de micro ordenadores y no sé como se apañaban. ( Y eso que todos los hemos usado ). Gosub puede tener un pase, pero goto
es volverse loco. Recordemos que teníamos sentencias concretas para los comentarios y ahí describíamos lo que hacía,
con lo que el salto podía explicarse.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#5

Yo recuerdo haber usado ON GOSUB ya que era muy útil en caso de tener un menú con varias opciones.Y si, GOTO era un auténtico suplicio como el código fuese un poco largo.
    ¡Gracias!
#6

(10-05-2023, 22:17)guizans escribió:  Yo recuerdo haber usado ON GOSUB ya que era muy útil en caso de tener un menú con varias opciones

ON GOSUB era imitable con un juego de sentencias.

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#7

(12-05-2023, 15:05)Shell escribió:  ON GOSUB era imitable con un juego de sentencias.

Si, lo se. Pero usar ON GOSUB era muy cómodo y ocupaba poco espacio.
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)