Je suis confus à ce sujet. La plupart d'entre nous ont appris qu'il n'y a aucune instruction goto en Java.
Mais j'ai trouvé que c'est l'un des mots clés de Java. Où peut-il être utilisé? S'il ne peut pas être utilisé, pourquoi a-t-il été inclus dans Java comme mot-clé?
Réponses:
La liste des mots clés Java spécifie le
goto
mot clé, mais il est marqué comme "non utilisé".Il était dans la JVM d'origine (voir la réponse de @VitaliiFedorenko ), mais a ensuite été supprimé. Il a probablement été conservé comme mot clé réservé au cas où il serait ajouté à une version ultérieure de Java.
S'il
goto
n'était pas sur la liste, et qu'il est ajouté à la langue plus tard, le code existant qui utilisait le motgoto
comme identifiant (nom de variable, nom de méthode, etc ...) se briserait. Mais commegoto
c'est un mot-clé, un tel code ne se compilera même pas dans le présent, et il reste possible de le faire réellement faire quelque chose plus tard, sans casser le code existant.la source
This was probably done in case it were to be added to a later version of Java.
En fait, la raison principale est un peu différente (voir ma réponse ci-dessous)James Gosling a créé la JVM d'origine avec le support des
goto
instructions, mais il a ensuite supprimé cette fonctionnalité comme inutile. La raison principalegoto
n'est pas nécessaire, car elle peut généralement être remplacée par des instructions plus lisibles (commebreak/continue
) ou en extrayant un morceau de code dans une méthode.Source: James Gosling, session de questions / réponses
la source
goto
est la façon la plus simple et la plus claire d'exprimer quelque chose, donc le forcer à autre chose est forcément moins lisible .Le mot clé existe, mais il n'est pas implémenté.
La seule bonne raison d'utiliser goto à laquelle je peux penser est la suivante:
En Java, vous pouvez faire ceci comme ceci:
la source
break loops
"sortir de la boucle appeléeloops
". Peut-être rétrospectivement aurait-il pu être un meilleur nom pour le labelouter
.while (true) {
...}
c'est exagéré. GOTO est fréquemment stigmatisé pour ses utilisations inappropriées, mais je soutiens que des comparaisons inutiles avec les littéraux booléens sont pires que GOTO.continue LABEL;
déclaration. Ainsi, vous pouvez continuer une boucle de couchage externe.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
la source
Ils pourraient donc être utilisés un jour si les concepteurs de langage en ressentaient le besoin.
De plus, si les programmeurs des langages qui ont ces mots clés (par exemple C, C ++) les utilisent par erreur, alors le compilateur Java peut donner un message d'erreur utile.
Ou peut-être que c'était juste pour arrêter les programmeurs d'utiliser goto :)
la source
goto
etconst
reflétant son héritage C / C ++ mais ils restent non implémentés (bien qu'il y ait eu des débats sur l'implémentation de ce dernier). Un couple ressemblait davantageassert
etenum
n'était pas initialement réservé, mais aurait peut-être dû l'être, étant donné qu'ils ont été mis en œuvre. Mais le recul est une chose merveilleuse.Ils sont réservés pour une utilisation future (voir: Mots clés du langage Java )
La raison pour laquelle il n'y a aucune instruction goto en Java peut être trouvée dans " The Java Language Environment ":
la source
goto
est réservé, mais pas pour une utilisation future.Un exemple d'utilisation des libellés "continuer" en Java est:
Résultats:
la source
Il est important de comprendre que la
goto
construction remonte à l'époque où les programmeurs programmaient en code machine et en langage assembleur. Parce que ces langues sont si fondamentaux (comme dans chaque instruction ne fait que d' une chose), le flux de contrôle du programme se fait entièrement avec desgoto
déclarations (mais en langage assembleur, ceux - ci sont appelés saut ou branche instructions).Maintenant, bien que le langage C soit de bas niveau, il peut être considéré comme un langage d'assemblage de très haut niveau - chaque instruction et fonction en C peut facilement être décomposée en instructions de langage d'assemblage. Bien que C ne soit pas le langage principal pour programmer des ordinateurs de nos jours, il est encore largement utilisé dans les applications de bas niveau, telles que les systèmes embarqués. Parce que la fonction de C reflète si étroitement la fonction du langage d'assemblage, cela n'a de sens que d'
goto
être inclus dans C.Il est clair que Java est une évolution de C / C ++. Java partage beaucoup de fonctionnalités de C, mais résume beaucoup plus de détails, et est donc simplement écrit différemment. Java est un langage de très haut niveau, il n'est donc tout simplement pas nécessaire d'avoir des fonctionnalités de bas niveau comme
goto
lorsque plus de constructions de haut niveau comme les fonctions, pour, pour chacune, et tandis que les boucles font le flux de contrôle du programme. Imaginez si vous étiez dans une fonction et que vous avez faitgoto
une étiquette dans une autre fonction. Que se passerait-il lorsque l'autre fonction reviendrait? Cette idée est absurde.Cela ne répond pas nécessairement pourquoi Java inclut l'
goto
instruction mais ne la laisse pas compiler, mais il est important de savoir pourquoigoto
a été utilisé en premier lieu, dans les applications de niveau inférieur, et pourquoi cela n'a tout simplement pas de sens d'être utilisé en Java.la source
Non,
goto
n'est pas utilisé, mais vous pouvez définir des étiquettes et laisser une boucle jusqu'à l'étiquette. Vous pouvez utiliserbreak
oucontinue
suivre l'étiquette. Vous pouvez donc sauter plusieurs niveaux de boucle. Jetez un œil au tutoriel .la source
Non, heureusement, il n'y en a pas
goto
en Java.Le
goto
mot-clé est uniquement réservé, mais pas utilisé (il en va de mêmeconst
).la source
Parce que ce n'est pas pris en charge et pourquoi voudriez-vous un
goto
mot clé qui n'a rien fait ou une variable nomméegoto
?Bien que vous puissiez utiliser les instructions
break label;
etcontinue label;
pour faire ce quigoto
fonctionne efficacement . Mais je ne le recommanderais pas.la source
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.
cela signifie "Nous ne l'utilisons pas, donc si vous venez d'un arrière-plan C ++, nous ne vous laisserons pas du tout l'utiliser.". 2)goto
est un terrible nom de méthode. Désolé. 3) pause et continuer sont recommandés, mais pas de la manière utilisée ici . 4) "très probablement" [citation nécessaire].Non,
goto
n'est pas utilisé en Java, bien qu'il s'agisse d'un mot réservé. Il en va de même pourconst
. Les deux sont utilisés en C ++, ce qui est probablement la raison pour laquelle ils sont réservés; l'intention était probablement d'éviter de confondre les programmeurs C ++ migrant vers Java, et peut-être aussi de conserver la possibilité de les utiliser dans les versions ultérieures de Java.la source
goto
ne sera pas supporté dans un avenir proche au moins;)Notez que vous pouvez remplacer la plupart des utilisations bénignes de goto par
revenir
Pause
casser l' étiquette
jeter à l'intérieur essayer-attraper-enfin
la source
return
Comme cela a été souligné, il n'y
goto
en a pas en Java, mais le mot-clé était réservé au cas où Sun aurait envie d'ajoutergoto
Java un jour. Ils voulaient pouvoir l'ajouter sans casser trop de code, alors ils ont réservé le mot-clé. Notez qu'avec Java 5, ils ont ajouté leenum
mot - clé et cela n'a pas cassé autant de code non plus.Bien que Java n'en ait pas
goto
, il a des constructions qui correspondent à certains usages degoto
, à savoir pouvoirbreak
etcontinue
avec des boucles nommées. En outre,finally
peut être considéré comme une sorte de torsiongoto
.la source
Interdire les déclarations de variables du même nom.
par exemple
int i = 0, goto;
la source
Il est très bien considéré comme l'une de ces choses que vous ne faites pas, mais a probablement été répertorié comme un mot réservé pour éviter toute confusion pour les développeurs.
la source
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Si on vous a dit qu'il n'y a aucune instruction goto en Java, vous avez été dupe. En effet, Java se compose de deux couches de code «source».
la source
Voir le lien suivant qui montre tous les mots réservés java et vous indique quelles versions ils ont été ajoutés.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto est réservé, même s'il n'est pas utilisé actuellement, ne dites jamais jamais cependant :)
la source
Je ne suis pas fan
goto
non plus, car cela rend généralement le code moins lisible. Cependant, je crois qu'il y a des exceptions à cette règle (surtout en ce qui concerne les lexers et les analyseurs!)Bien sûr, vous pouvez toujours importer votre programme dans Kleene Normalform en le traduisant en quelque chose comme un assembleur, puis en écrivant quelque chose comme
(Donc, vous écrivez essentiellement une machine virtuelle qui exécute votre code binaire ... où
line
correspond au pointeur d'instruction)C'est tellement plus lisible que le code qui l'utilise
goto
, n'est-ce pas?la source
Bien sûr, c'est un mot-clé, mais il n'est pas utilisé au niveau du code source.
Mais si vous utilisez jasmin ou un autre langage de niveau inférieur, qui est transformé en bytecode, alors "goto" est là
la source
Parce que bien que le langage Java ne l'utilise pas, le bytecode JVM le fait.
la source
load
mot-clé?goto n'est pas en Java
vous devez utiliser GOTO Mais cela ne fonctionne pas correctement. dans le mot clé java, il n'est pas utilisé. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
la source