Est-il une instruction goto en Java?
Je suis confus au sujet de ce. La plupart d'entre nous ont dit qu'il n'existe 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é? Si elle ne peut pas être utilisé, alors pourquoi était-il inclus dans Java comme un mot-clé?
- juste un conseil: ne jamais utiliser goto
- Maître de Dijkstra dit : "Aller À l'Énoncé Considéré comme Nocif".Check this out : stackoverflow.com/questions/46586/goto-still-considered-harmful
- Et puis il y a ", "Aller À l'Énoncé Considéré comme Nocif Considérées comme des Nuisibles", et "'"Aller À l'Énoncé Considéré comme Nocif", jugée dangereuse " Considéré comme Dangereux?" VEEEEERY récursive, ce mème.
- C mon gars - tout le monde sait que GOTO est mal, mais ce n'est pas answear à la question, est-il?
- 'goto' est toujours le mal - comme dans "aller travailler" ou "aller à l'école";)
- Pas juste goto, const est également réservé.
- Merci!!!! Vous avez juste m'a aidé à combler le "Sur-Moi" dans mon profil. 🙂
- La vraie raison est que le "g**o" du mot est considéré comme obscène dans la plupart des langages de programmation. La Java des designers sont simplement la protection des innocents jeunes programmeurs de corrompre les influences. ( 🙂 )
- double possible de alternative à l'instruction goto en Java
- Ne pas être corrompu. Mais découvrez github.com/footloosejava/JavaGoto
- Plusieurs réponses ici l'état qu'il est réservé pour une utilisation future, qui n'est pas correct. La vérité est que Gosling de s'en débarrasser très vite de version et juste gardé le mot clé réservé.
- La chasse aux sorcières contre les goto, a engendré certains des plus aggravante des moments dans ma vie. J'ai vu des gens se contorsionner code C en se cachant de la fonctionnalité dans les fonctions de, mettre absurde à sortir de la logique multi-boucles imbriquées, et sinon faire chaque forme de plus-ingénierie imaginables JUSTE pour éviter que quelqu'un critique de leur code dans un code d'examen. Cette règle, ainsi que le "tu dois éviter de multiples retours de canard, est ancré dans l'absurdité. Il ya des moments où goto rend les choses moins maintenable. Il ya des moments où goto rend les choses plus facile à gérer. J'étais donc en espérant que cette chasse aux sorcières serait mort dans les années 80.
- 2 ans depuis que j'ai appris la programmation, c'est la première fois que je vois une bonne utilisation de
goto
, je veux dire, ça pourrait être utile. Ou de dire: Pourquoi supprimer une fonctionnalité en premier lieu? - n'existent plus, c'est pour la postérité) c'est assez amusant:
goto
est la seule ramification instruction connu par le processeur de l'exécution de notre code, et le seul que nous, les programmeurs, sont interdits à l'usage...
Vous devez vous connecter pour publier un commentaire.
La Java liste de mots clés spécifie le
goto
mot-clé, mais il est marqué comme "non utilisé".Il a été à l'origine de la JVM (voir réponse par @VitaliiFedorenko), mais ensuite retiré. Il a probablement été conservé comme un mot clé réservé au cas où il venait à être ajouté à une version ultérieure de Java.
Si
goto
n'était pas sur la liste, et il est ajouté à la langue plus tard, un code existant qui a utilisé le motgoto
comme un identificateur (nom de la variable nom de la méthode, etc...) allait se briser. Mais parce quegoto
est un mot-clé, ce code ne sera même pas compiler dans le présent, et il reste possible de le faire réellement faire quelque chose plus tard, sans casser le code existant.This was probably done in case it were to be added to a later version of Java.
En fait, la principale raison est un peu différent (voir ma réponse ci-dessous)James Gosling à l'origine de la JVM avec le soutien de
goto
états, mais ensuite, il a supprimé cette fonctionnalité inutile. La raison principalegoto
est inutile, c'est que généralement il peut être remplacé avec plus lisible états (commebreak/continue
) ou par l'extraction d'un morceau de code dans une méthode.Source: James Gosling, Q&Une session
goto
est la plupart des readyble et claire d'exprimer quelque chose, afin de le forcer en quoi que ce soit d'autre est nécessairement moins lisible.Le mot-clé existe, mais il n'est pas mis en œuvre.
La seule bonne raison d'utiliser goto que je peux penser est-ce:
En Java, vous pouvez le faire comme ceci:
break loops
signifie "sortir de la boucle diteloops
". Peut-être que, rétrospectivement, un meilleur nom pour le label pourrait avoir étéouter
.while (true) {
...}
est exagéré. GOTO est souvent stigmatisée pour son utilisation impropre, mais je soutiens qu'inutiles comparaisons de littéraux booléens est pire que GOTO.goto
pour casser les boucles imbriquées. Je crois, c'est utile uniquement pour cela. Merci pourbreak LABEL;
de la syntaxe. Je ne suis pas familier avec elle!continue LABEL;
déclaration. Ainsi, vous pouvez continuer extérieur couché boucle.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
Donc ils pourraient l'être un jour, si la langue concepteurs ressenti le besoin.
Aussi, si les programmeurs de langues qui n'ont que ces mots-clés (par exemple. C, C++), les utilisent par erreur, le compilateur Java peuvent donnent un message d'erreur.
Ou peut-être que c'était juste pour arrêter les programmeurs d'utiliser goto 🙂
goto
etconst
le reflet de son C/C++ patrimoine, mais elles ne sont pas respectées (bien qu'il y a eu des débats sur la mise en œuvre de ce dernier). Un couple de plus commeassert
etenum
n'étaient pas initialement réservé, mais peut-être devrait ont été, é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: Les Mots Clés Du Langage Java)
La raison pourquoi il n'y a pas d'instruction goto en Java peut être trouvé dans "Le Langage Java Environnement":
goto
est réservé, mais pas pour une utilisation future.Un exemple d'utilisation de "continuer" étiquettes en Java:
Résultats:
Il est important de comprendre que le
goto
construire est un vestige de l'époque que les programmeurs programmé en code machine et le langage d'assemblage. Parce que ces langues sont donc de base (comme dans, chaque instruction ne fait que un chose), le programme de contrôle de flux est réalisé entièrement avecgoto
consolidés (mais en langage d'assemblage, ceux-ci sont appelés saut ou direction instructions).Maintenant, bien que le langage C est assez bas niveau, il peut être considéré comme très haut niveau de l'assemblée de la langue de chaque instruction et la fonction en C peut aisément être décomposé en instructions en langage assembleur. Bien que C est pas la langue principale du programme des ordinateurs de nos jours, il est encore largement utilisé dans des applications de niveau, tels que les systèmes embarqués. Parce que C de la fonction, donc proche de l'assembleur de la fonction, il n'a de sens que
goto
est inclus dans C.Il est clair que Java est une évolution de C/C++. Java partage beaucoup de caractéristiques à partir de C, mais les résumés beaucoup plus de détails, et, par conséquent, est tout simplement écrit différemment. Java est un très haut de niveau de langue, de sorte qu'il n'est tout simplement pas nécessaire d'avoir de bas niveau des fonctions comme
goto
quand plus haut niveau des constructions comme pour les fonctions, pour, pour chacun d'eux, et tandis que les boucles ne le programme de contrôle de flux. Imaginez si vous étiez dans une fonction et a ungoto
à une étiquette dans une autre fonction. Qu'arriverait-il si l'autre fonction de retour? Cette idée est absurde.Cela ne veut pas nécessairement dire pourquoi Java inclut les
goto
relevé n'est pas dans la compilation, mais il est important de savoir pourquoigoto
a jamais été utilisé, en premier lieu, dans le bas-niveau des applications, et pourquoi il n'a tout simplement pas de sens pour être utilisé en Java.Non,
goto
n'est pas utilisé, mais vous pouvez définir des étiquettes et de laisser une boucle jusqu'à l'étiquette. Vous pouvez utiliserbreak
oucontinue
suivi de l'étiquette. De sorte que vous pouvez sauter plus d'une boucle de niveau. Jetez un oeil à le tutoriel.Non, heureusement, il n'y a pas
goto
en Java.La
goto
mot-clé n'est réservé, mais n'est pas utilisé (il en va de même pourconst
).Car il n'est pas soutenu et pourquoi voulez-vous une
goto
mots clés qui n'ont rien fait ou une variable nomméegoto
?Bien que vous pouvez utiliser
break label;
etcontinue label;
déclarations à cegoto
n'. Mais je ne le recommande pas.break
etcontinue
sont mauvaisThe 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.
Ce qui signifie "Nous ne l'utilisons pas, donc si vous êtes en provenance d'un C++ arrière-plan, nous n'allons pas vous permettre de l'utiliser à tous.". 2)goto
est un terrible nom de la méthode. Désolé. 3) break et continue sont recommandés, mais pas dans le sens utilisé ici. 4) "le plus probable" [citation nécessaire].Non,
goto
n'est pas utilisé en Java, en dépit d'être un mot réservé. Le même est vrai pourconst
. Ces deux sont utilisés en C++, qui est probablement la raison pour laquelle ils sont réservés; l'intention était probablement pour éviter de confondre les programmeurs en C++ de la migration vers Java, et peut-être aussi la possibilité de leur utilisation dans les révisions ultérieures de Java.goto
n'est pas pris en charge dans un avenir proche, au moins 😉goto
.Comme il l'a souligné, il n'y a pas de
goto
en Java, mais le mot d'ordre a été réservé dans le cas où le Soleil se sentait comme l'ajout degoto
en Java d'un jour. Ils voulaient être en mesure de l'ajouter sans casser trop de code, de sorte qu'ils réservés à la clé. Notez qu'avec Java 5, ils ont ajouté leenum
mot-clé et il n'a pas rompu que beaucoup de code.Bien que Java n'a pas de
goto
, il a des constructions qui correspondent à certaines utilisations de l'goto
, à savoir être en mesure debreak
etcontinue
nommés boucles. Aussi,finally
peut être considéré comme une sorte de twistedgoto
.Notez que vous pouvez remplacer la plupart de la plus bénigne utilise de goto par
retour
pause
pause étiquette
jeter à l'intérieur de try-catch-finally
return
goto
bénigne si elle pourrait être remplacée parcontinue
, donccontinue
est intentionnellement laissée en dehors de la liste.À interdire les déclarations de variables avec le même nom.
par exemple
int i = 0, goto;
C'est très bien considérée comme l'une de ces choses que vous Ne le faites Pas, mais a probablement été répertorié comme un mot réservé pour éviter toute confusion pour les développeurs.
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
Si vous avez été dit qu'il n'y a pas d'instruction goto en Java, vous avez été dupé. En effet, Java est constitué de deux couches de "la source" de code.
Voir le lien suivant est montre tous les produits java sont des mots réservés et vous indique quelles sont les versions où ils ajouté.
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
goto est réservé, même si elle n'est pas utilisée actuellement, ne jamais dire jamais cependant 🙂
Je ne suis pas un fan de
goto
soit, comme c'est généralement le rend le code moins lisible. Cependant, je crois qu'il y a des exceptions à cette règle (surtout quand il s'agit de lexers et analyseurs!)Bien Sûr, vous pouvez toujours apporter votre programme dans Kleene Normalform par de le traduire en quelque chose assembleur et puis écrire quelque chose comme
(Donc en gros, vous écrivez une machine virtuelle qui exécute votre code binaire... où
line
correspond au pointeur d'instruction)Qui est beaucoup plus lisible que le code qui utilise
goto
, n'est-ce pas?Parce que, bien que le langage Java ne l'utilise pas, le bytecode JVM n'.
load
mot-clé?Bien sûr, il est un mot clé, mais il n'est pas utilisé au niveau du code source.
Mais si vous utilisez jasmin ou autre langage de plus bas niveau, qui est transformé en bytecode, puis "goto" est-il
goto n'est pas dans Java
vous devez utiliser GOTO
Mais il ne fonctionne pas correctement.dans les principaux java mot, il n'est pas utilisé.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html