Sollte ich jemals in einer switch-Anweisung weitermachen?
Bemerkte ich, können Sie verwenden in der Tat die continue
Schlüsselwort in einer switch-Anweisung, aber auf PHP es nicht, was mich erwartet.
Wenn es nicht mit PHP, wer weiß wie viele andere Sprachen zu schlägt? Wenn ich wechseln zwischen Sprachen eine Menge, kann dies ein problem sein, wenn der code verhält sich nicht wie ich erwarten, dass es sich zu Verhalten hat.
Sollte ich einfach vermeiden, mit continue
in einer switch-Anweisung dann?
PHP (5.2.17) schlägt fehl:
for($p = 0; $p < 8; $p++){
switch($p){
case 5:
print"($p)";
continue;
print"*"; //just for testing...
break;
case 6:
print"($p)";
continue;
print"*";
break;
}
print"$p\r\n";
}
/*
Output:
0
1
2
3
4
(5)5
(6)6
7
*/
C++ scheint zu funktionieren wie erwartet (springt zum Ende der for-Schleife):
for(int p = 0; p < 8; p++){
switch(p){
case 5:
cout << "(" << p << ")";
continue;
cout << "*"; //just for testing...
break;
case 6:
cout << "(" << p << ")";
continue;
cout << "*";
break;
}
cout << p << "\r\n";
}
/*
Output:
0
1
2
3
4
(5)(6)7
*/
Kommentar zu dem Problem
Ende der Schleife? Ich würde nicht unbedingt nennen-switch eine loop-Anweisung, es ist eine erweiterte if-else Anweisung in meinem Blick - und Sie rufen weiter in der if-else?
Ich glaube nicht, dass es eine gute Idee zu Fragen, für Allgemeine Beratung über die Programmierung Konstrukte, die nur als die gleiche in verschiedenen Sprachen. Suchen Sie für die Beratung, die für jede einzelne Sprache. Sie sind anders, nachdem alle, alle mit verschiedenen guten Praktiken. Also mein Rat wäre, um weiterhin in den Sprachen, wo es funktioniert und wo es gilt allgemein eine gute Sache zu tun.
@ZathrusWriter Die Frage sagt "Ende" for "- Schleife", nicht "Ende der Schleife". Die
weiter
in der Frage ist beabsichtigt, zu springen, um das Ende der for
- Schleife. @hvd lol, ich brauche eine bessere Brille... sorry 😀
@Rookie: ich würde sagen, es gibt genug große und kleine Unterschiede zwischen php und c++, die Sie sollten vorsichtig sein, in jeder Zeile und nicht nur versuchen, "visuell zu übersetzen" den source-code. Imho ist dies nur eine der vielen Reise-Minen, die Sie stoßen bei der übersetzung zwischen allen Sprachen, nicht nur php und c++.
InformationsquelleAutor der Frage Rookie | 2012-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider
continue
undbreak
sind die gleichen inPHP
bei der Verwendungswitch
Aussagen.Lassen Sie sich nicht
PHP
ruinieren Ihre Erfahrungen in andere Sprachen, weiter zu verwendencontinue
wo Sie es brauchen!InformationsquelleAutor der Antwort Aesthete
Versuchen Sie es mit
continue 2
weiterhin auf die nächste iteration der Schleife rund um die switch-Anweisung.EDIT:
//This will print:
Sleeping...
Sleeping...
Sleeping...
Hello World!
InformationsquelleAutor der Antwort Liam
Die Dokumentation der PHP -
weiter
- Anweisung macht dies deutlich:Sollten Sie wissen, dass unterschiedliche Sprachen die gleichen keywords subtil unterschiedliche Bedeutungen, und nicht davon ausgehen, dass PHP
continue
verhält sich wie C++continue
.Wenn
continue
Sinn in einer PHPswitch
wo es würde nicht funktionieren in C++, die es benutzen.Wenn
continue
sinnvoll in einem C++ -switch
wo es nicht geht in PHP, die es benutzen.InformationsquelleAutor der Antwort hvd
Es ist wichtig zu beachten, dass
continue
undbreak
Verhalten sich nicht die gleichen, wenn dieswitch
- Anweisung geschachtelt ist eine Schleife. Wenn Sie eineswitch
Aussage zu bewerten etwas, und wollen sich zu bewegen auf das nächste Element innerhalb der Schleife wenn die Bedingung erfüllt ist, sollten Siecontinue 2
. Mitbreak 2
in diesem Fall bricht der gesamtefor
- Schleife, die möglicherweise nicht die gewünschte Aktion.InformationsquelleAutor der Antwort ZeLoubs
In C und C++, die
switch
- Anweisung ist nur eine ausgefallene Kombination vonif/else if
- und-Etiketten/goto
, so mitcontinue
innenswitch
ist okay. Aber als Sie bemerkt es nicht, was Sie erwarten, dass es in anderen Sprachen ähnliche zu C oder C++. Das ist, weil Sie sind nur ähnlich, wenn es um die syntax, semantische Regeln, Sie sind sehr unterschiedliche Tiere. So eine Sache, das funktioniert in einer Sprache, die auf jeden Fall nicht in einem anderen arbeiten, auch wenn die Sprachen ähnlich Aussehen.InformationsquelleAutor der Antwort Some programmer dude
Verwendung von continue innerhalb einer C++ -
switch /case
- Konstrukt, eingebettet in einer Schleife ist vollkommen OK. Sie sollten nicht beschränken Sie Ihren Stil in C++ nur aufgrund von Fehlverhalten auftreten in anderen Programmiersprachen.InformationsquelleAutor der Antwort πάντα ῥεῖ
Als gewarnt in die PHP-Handbuch:
"Beachten Sie, dass in PHP die switch Anweisung als schleifenstruktur zum Zweck von continue."
So dass die Verwendung von continue break aus dem switch-Anweisung, nicht die for-Schleife. Die Tücken der Annahme ähnlicher syntax in allen Sprachen.
InformationsquelleAutor der Antwort The Forest And The Trees