J'ai du code que je dois absolument implémenter en utilisant goto
. Par exemple, je veux écrire un programme comme celui-ci:
start:
alert("RINSE");
alert("LATHER");
repeat: goto start
Y a-t-il un moyen de faire cela en Javascript?
J'ai du code que je dois absolument implémenter en utilisant goto
. Par exemple, je veux écrire un programme comme celui-ci:
start:
alert("RINSE");
alert("LATHER");
repeat: goto start
Y a-t-il un moyen de faire cela en Javascript?
Absolument! Il existe un projet d'Été de Goto qui permet l'utilisation de Javascript à son plein potentiel et va révolutionner la façon dont vous pouvez écrire votre code.
Ce Javascript prétraitement outil vous permet de créer une étiquette, puis goto à l'aide de cette syntaxe:
[lbl] <label-name>
goto <label-name>
Par exemple, l'exemple de la question peut être écrit comme suit:
[lbl] start:
alert("LATHER");
alert("RINSE");
[lbl] repeat: goto start;
Vous pouvez voir cet exemple en action sur jsFiddle, mais sachez que ce sera une boucle infinie et vous pourriez avoir à forcer l'arrêt de votre navigateur pour en sortir.
Notez que vous ne sont pas seulement limitée à la simple programmes comme une interminable LATHER
RINSE
répétition du cycle--les possibilités offertes par l' goto
sont infinies et vous pouvez même faire une Hello, world!
message à la console Javascript 538 fois, comme ceci:
var i = 0;
[lbl] start:
console.log("Hello, world!");
i++;
if(i < 538) goto start;
Encore une fois, vous pouvez le voir en action sur jsFiddle, et cette fois, vous n'avez pas à vous soucier d'avoir à la fin le programme de force.
Vous pouvez lire plus sur comment goto est mis en œuvre, mais, fondamentalement, il fait un peu de Javascript prétraitement qui tire profit du fait que vous pouvez simuler un goto avec un étiquetés while
boucle. Donc, quand vous écrivez "Hello, world!" programme ci-dessus, il est traduit à quelque chose comme ceci:
var i = 0;
start: while(true) {
console.log("Hello, world!");
i++;
if(i < 538) continue start;
break;
}
Il y a certaines limites à ce processus de prétraitement, parce que tandis que les boucles ne peuvent pas s'étendent à travers de multiples fonctions ou des blocs. Ce n'est pas une grosse affaire, mais-je suis sûr que les avantages d'être en mesure de prendre avantage de l' goto
en Javascript sera absolument vous accabler.
Non, ils ne l'incluaient pas dans ECMAScript:
ECMAScript n'a pas de déclaration goto.
En fait, je vois que ECMAScript (JavaScript) N'ont, en EFFET, une instruction goto. Cependant, le JavaScript goto a deux saveurs!
Les deux JavaScript saveurs de goto sont appelés marqué continuer et étiquetés pause. Il n'y a pas de mot-clé "goto" en JavaScript. Le goto est réalisée en JavaScript à l'aide de la pause et de continuer de mots clés.
Et c'est plus ou moins explicitement sur le site w3schools ici http://www.w3schools.com/js/js_switch.asp.
- Je trouver la documentation de la étiquetés continuer et étiquetés casser un peu maladroitement exprimé.
La différence entre la borne continuer et marqué de pause où ils peuvent être utilisés. L'étiquette de poursuivre ne peut être utilisé à l'intérieur d'une boucle while. Voir w3schools pour plus d'information.
===========
Une autre approche serait d'avoir un géant de l'instruction while avec un géant de l'instruction switch à l'intérieur:
while (true)
{
switch (goto_variable)
{
case 1:
// some code
goto_variable = 2
break;
case 2:
goto_variable = 5 // case in etc. below
break;
case 3:
goto_variable = 1
break;
etc. ...
}
}
const
start = 0,
more = 1,
pass = 2,
loop = 3,
skip = 4,
done = 5;
var label = start;
while (true){
var goto = null;
switch (label){
case start:
console.log('start');
case more:
console.log('more');
case pass:
console.log('pass');
case loop:
console.log('loop');
goto = pass; break;
case skip:
console.log('skip');
case done:
console.log('done');
}
if (goto == null) break;
label = goto;
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.