Estoy confundido acerca de esto. A la mayoría de nosotros nos han dicho que no hay ninguna declaración goto en Java.
Pero descubrí que es una de las palabras clave en Java. ¿Donde puede ser usado? Si no se puede usar, ¿por qué se incluyó en Java como palabra clave?
Respuestas:
La lista de palabras clave de Java especifica la
goto
palabra clave, pero está marcada como "no utilizada".Estaba en la JVM original (ver respuesta de @VitaliiFedorenko ), pero luego se eliminó. Probablemente se mantuvo como una palabra clave reservada en caso de que se agregara a una versión posterior de Java.
Si
goto
no estaba en la lista y luego se agrega al idioma, el código existente que usaba la palabragoto
como identificador (nombre de la variable, nombre del método, etc.) se rompería. Pero debido a quegoto
es una palabra clave, dicho código ni siquiera se compilará en el presente, y sigue siendo posible hacer que realmente haga algo más adelante, sin romper el código existente.fuente
This was probably done in case it were to be added to a later version of Java.
En realidad, la razón principal es un poco diferente (ver mi respuesta a continuación)James Gosling creó la JVM original con soporte de
goto
declaraciones, pero luego eliminó esta característica como innecesaria. La razón principalgoto
es innecesaria es que generalmente se puede reemplazar con declaraciones más legibles (comobreak/continue
) o extrayendo un fragmento de código en un método.Fuente: James Gosling, sesión de preguntas y respuestas
fuente
goto
es la forma más fácil y clara de expresar algo, por lo que forzarlo a cualquier otra cosa es menos legible .La palabra clave existe, pero no está implementada.
La única buena razón para usar goto que se me ocurre es esta:
En Java puedes hacer esto así:
fuente
break loops
significa "salir del ciclo llamadoloops
". Tal vez en retrospectiva, podría haber sido un mejor nombre para la etiquetaouter
.while (true) {
...}
es exagerado. GOTO es frecuentemente estigmatizado por sus usos inapropiados, pero sostengo que las comparaciones innecesarias con los literales booleanos son peores que GOTO.continue LABEL;
declaración. Por lo tanto, puede continuar un bucle de mentira exterior.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
fuente
Entonces podrían usarse algún día si los diseñadores de idiomas sintieran la necesidad.
Además, si los programadores de lenguajes que tienen estas palabras clave (por ejemplo, C, C ++) las usan por error, entonces el compilador de Java puede dar un mensaje de error útil.
O tal vez fue solo para detener a los programadores que usan goto :)
fuente
goto
yconst
reflejó su herencia C / C ++, pero siguen sin implementarse (aunque ha habido debates sobre la implementación de este último). A un par más les gustaassert
yenum
no estaban inicialmente reservados, pero quizás deberían haberlo sido, dado que se han implementado. Pero la retrospectiva es algo maravilloso.Están reservados para uso futuro (ver: Palabras clave del lenguaje Java )
La razón por la cual no hay una declaración goto en Java se puede encontrar en " El entorno del lenguaje Java ":
fuente
goto
está reservado, pero no para uso futuro.Un ejemplo de cómo usar las etiquetas "continuar" en Java es:
Resultados:
fuente
Es importante comprender que la
goto
construcción es remanente desde los días que los programadores programaron en código máquina y lenguaje ensamblador. Debido a que esos lenguajes son tan básicos (como en cada instrucción hace solo una cosa), el flujo de control del programa se realiza completamente congoto
declaraciones (pero en lenguaje ensamblador, se denominan salto o ramificación instrucciones de ).Ahora, aunque el lenguaje C es de nivel bastante bajo, puede considerarse como un lenguaje ensamblador de muy alto nivel: cada declaración y función en C se puede dividir fácilmente en instrucciones en lenguaje ensamblador. Aunque el C no es el lenguaje principal para programar computadoras hoy en día, todavía se usa mucho en aplicaciones de bajo nivel, como los sistemas integrados. Debido a que la función de C refleja tan estrechamente la función del lenguaje ensamblador, tiene sentido
goto
esté incluida en C.Está claro que Java es una evolución de C / C ++. Java comparte muchas características de C, pero abstrae muchos más detalles y, por lo tanto, simplemente se escribe de manera diferente. Java es un lenguaje de muy alto nivel, por lo que simplemente no es necesario tener características de bajo nivel, como
goto
cuando hay más construcciones de alto nivel como funciones, para, para cada uno, y mientras los bucles hacen el flujo de control del programa. Imagina si estuvieras en una función e hicieras ungoto
una etiqueta en otra función. ¿Qué pasaría cuando volviera la otra función? Esta idea es absurda.Esto no responde necesariamente por qué Java incluye la
goto
declaración, pero no lo deja compilar, pero es importante saber por quégoto
se usó en primer lugar, en aplicaciones de nivel inferior, y por qué simplemente no tiene sentido ser utilizado en Javafuente
No,
goto
no se utiliza, pero puede definir etiquetas y dejar un bucle hasta la etiqueta. Puede usarbreak
ocontinue
seguido por la etiqueta. Para que pueda saltar más de un nivel de bucle. Echa un vistazo al tutorial .fuente
No, afortunadamente, no hay
goto
en Java.La
goto
palabra clave solo está reservada, pero no se usa (lo mismo ocurre conconst
).fuente
Porque no es compatible y por qué querría una
goto
palabra clave que no hizo nada o una variable llamadagoto
?Aunque puede usar
break label;
ycontinue label;
declaraciones para hacer efectivamente lo quegoto
hace. Pero no lo recomendaría.fuente
The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.
esto significa "No lo usamos, así que si vienes de un entorno C ++ no te dejaremos usarlo en absoluto". 2)goto
es un nombre de método terrible. Lo siento. 3) se recomienda romper y continuar, pero no en la forma en que se usa aquí . 4) "más probable" [cita requerida].No,
goto
no se usa en Java, a pesar de ser una palabra reservada. Lo mismo es cierto paraconst
. Ambos se usan en C ++, que es probablemente la razón por la que están reservados; la intención probablemente fue evitar confundir a los programadores de C ++ que migran a Java, y quizás también mantener la opción de usarlos en revisiones posteriores de Java.fuente
goto
al menos no sea compatible en el futuro cercano;)Tenga en cuenta que puede reemplazar la mayoría de los usos benignos de goto por
regreso
descanso
rotura de etiqueta
tirar adentro try-catch-finally
fuente
return
Como se señaló, no existe
goto
en Java, pero la palabra clave se reservó en caso de que Sun quisiera agregargoto
a Java algún día. Querían poder agregarlo sin romper demasiado código, por lo que reservaron la palabra clave. Tenga en cuenta que con Java 5 agregaron elenum
palabra clave y tampoco rompió tanto código.Aunque Java no tiene
goto
, tiene algunas construcciones que corresponden a algunos usos degoto
, es decir, poderbreak
ycontinue
con bucles con nombre. Además,finally
puede considerarse como una especie de retorcidogoto
.fuente
Prohibir declaraciones de variables con el mismo nombre.
p.ej
int i = 0, goto;
fuente
Se considera en gran medida una de esas cosas que no debes hacer, pero probablemente se mencionó como una palabra reservada para evitar confusiones para los desarrolladores.
fuente
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Si le han dicho que no hay una declaración goto en Java, se ha engañado. De hecho, Java consta de dos capas de código 'fuente'.
fuente
Vea el siguiente enlace que muestra todas las palabras reservadas de Java y le dice qué versiones se agregaron.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto está reservado, aunque actualmente no se usa, nunca digas nunca nunca :)
fuente
No soy fan de
goto
ellos, ya que generalmente hace que el código sea menos legible. Sin embargo, creo que hay excepciones a esa regla (¡especialmente cuando se trata de lexers y analizadores!)Por supuesto, siempre puede llevar su programa a Kleene Normalform traduciéndolo a algo parecido a un ensamblador y luego escribir algo como
(Así que básicamente escribes una VM que ejecuta tu código binario ... donde
line
corresponde al puntero de instrucción)Eso es mucho más legible que el código que usa
goto
, ¿no?fuente
Por supuesto, es una palabra clave, pero no se usa en el nivel del código fuente.
Pero si usa jasmin u otro lenguaje de nivel inferior, que se transforma en bytecode, entonces "goto" está ahí
fuente
Porque aunque el lenguaje Java no lo usa, JVM bytecode sí.
fuente
load
palabra clave?goto no está en Java
tienes que usar GOTO Pero no funciona correctamente. en la palabra clave java no se usa. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
fuente