web-dev-qa-db-fra.com

Dois-je utiliser continue dans une instruction switch?

J'ai remarqué que vous pouvez en effet utiliser le mot clé continue dans une instruction switch, mais sur PHP il ne fait pas ce que j'attendais.

S'il échoue avec PHP, qui sait combien d'autres langages il échoue aussi? Si je change beaucoup de langue, cela peut être un problème si le code ne se comporte pas comme je m'attends à ce qu'il se comporte.

Dois-je simplement éviter d'utiliser continue dans une instruction switch alors?

PHP (5.2.17) échoue:

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++ semble fonctionner comme prévu (saute à la fin de la boucle for):

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
*/
37
Rookie

Malheureusement, continue et break sont les mêmes dans PHP lors de l'utilisation des instructions switch.

Ne laissez pas PHP gâcher vos expériences dans d'autres langues et continuez à utiliser continue là où vous en avez besoin!

40
Aesthete

Essayez d'utiliser continue 2 pour passer à l'itération suivante de la boucle entourant l'instruction switch.

ÉDITER:

    $foo = 'Hello';

    for ($p = 0; $p < 8; $p++) {
         switch($p) {
             case 3:
                 if ($foo === 'Hello') {
                     echo $foo;
                     break;
                 } else {
                      continue 2;
                 }

             default:
                 echo "Sleeping...<br>";
                 continue 2;

         }

         echo "World!";
         break;
    }

//This will print: Sleeping... Sleeping... Sleeping... Hello World!

72
Liam

La documentation de l'instruction PHP continue le montre clairement:

Remarque: Notez que dans PHP l'instruction switch est considérée comme une structure en boucle aux fins de continuez.

Vous devez savoir que différents langages donnent aux mêmes mots clés des significations subtilement différentes, et ne pas supposer que PHP continue se comporte de la même manière que C++ continue.

Si continue est logique dans un PHP switch où cela ne fonctionnerait pas en C++, utilisez-le.

Si continue est logique dans un C++ switch où cela ne fonctionnerait pas en PHP, utilisez-le.

7
user743382

Comme le prévient le PHP Manual :

"Notez que dans PHP l'instruction switch est considérée comme une structure en boucle aux fins de continuer."

Ainsi, l'utilisation de continue sortira de l'instruction switch, pas de la boucle for. Les risques d'assumer une syntaxe similaire dans toutes les langues.

2

Il est important de noter que continue et break ne se comportent pas de la même manière lorsque l'instruction switch est imbriquée dans une boucle. Si vous utilisez une instruction switch pour évaluer quelque chose et que vous souhaitez passer à l'élément suivant dans la boucle si la condition est remplie, vous devez utiliser continue 2. En utilisant break 2 dans ce cas se détachera de la boucle for entière, ce qui peut ne pas être l'action souhaitée.

1
ZeLoubs

Utilisation de continue dans un C++ switch / case la construction qui est intégrée dans une boucle est parfaitement OK. Vous ne devez pas restreindre votre style en C++ simplement à cause d'un mauvais comportement dans d'autres langages de programmation.

0
πάντα ῥεῖ

En C et C++, l'instruction switch n'est qu'une combinaison sophistiquée de if/else if et labels/goto, donc utiliser continue dans switch est correct. Mais comme vous l'avez remarqué, il ne fait pas ce que vous attendez de lui dans d'autres langages similaires en C ou C++. C'est parce qu'ils ne sont similaires qu'en matière de syntaxe, pour les règles sémantiques, ce sont des bêtes très différentes. Donc, une chose qui fonctionne dans une langue ne fonctionnera certainement pas dans une autre même si les langues se ressemblent.

0