Considérez les deux extraits de code suivants, avec des accolades:
switch (var) {
case FOO: {
x = x + 1;
break;
}
case BAR: {
y = y + 1;
break;
}
}
Sans accolades:
switch (var) {
case FOO:
x = x + 1;
break;
case BAR:
y = y + 1;
break;
}
Je sais que, dans l'extrait avec accolades, une nouvelle portée est créée en entourant chaque cas entre accolades. Cependant, si chaque cas n'a pas besoin de la nouvelle portée (c'est-à-dire qu'aucun nom de variable n'est réutilisé), y a-t-il une sorte de pénalité de performance pour l'utilisation des accolades avec une casse?
la source
Comme nous le savons, les accolades pour les boîtiers de commutation ne sont pas nécessaires. L'utilisation d'accolades peut entraîner une confusion sur la portée d'un cas.
Une accolade ouvrante est généralement associée à quelque chose de significatif comme le début d'une fonction ou le début d'une boucle ou le début de la déclaration de classe ou le début de l'initialisation du tableau etc ... Nous savons qu'un cas sort du bloc switch lorsqu'il rencontre une rupture déclaration. Ainsi, l'utilisation d'accolades semble impliquer l'idée d'une portée différente pour un lecteur ignorant. Il est donc préférable d'éviter d'utiliser des accolades pour une meilleure lisibilité de la programmation.
ie quand j'ai quelque chose comme,
switch(i) { case 1 : { //do something } System.out.println("Hello from 1"); case 2: .... }
"Hello from 1" est imprimé. Mais l'utilisation d'accolades peut suggérer à un lecteur ignorant que le cas se termine par '}', sachant déjà ce que signifient généralement les accolades en cas de boucles, de méthodes, etc.
Comme nous avons des instructions jump-to-label en 'C', le contrôle passe simplement à la casse et continue son exécution. Donc, avec cette compréhension, c'est juste une mauvaise pratique d'utiliser des accolades lors de l'écriture de cas pour switch.
Techniquement parlant, vous pouvez entourer n'importe quel bloc de votre code avec une paire supplémentaire d'accolades lorsqu'il est utilisé avec une syntaxe valide. Utiliser des accolades dans le commutateur me semble au moins si mauvais que cela semble donner une sensation différente, comme je l'ai dit ci-dessus.
Ma suggestion: évitez simplement d'utiliser des accolades environnantes pour les boîtiers de commutation.
la source
Avec des accolades.
Il y a tellement de choses qui peuvent mal tourner avec les instructions switch que j'essaye de les éviter là où je peux, ie
L'utilisation d'accolades est un moyen d'empêcher le partage intentionnel et accidentel de variables entre les instructions de cas
la source
...case 1: int a = 10; break; case 2: int a = 11; break; ...
ne compile pas. (testé avec Oracle JDK 8)Cette question va probablement être fermée comme "argumentative" (BRACE WAR!) Mais que diable. J'aime vraiment les accolades après les étuis. Pour moi, cela fait que la vilaine syntaxe de commutateur ressemble plus au reste des constructions de langage. (Il n'y a pas de pénalité pour l'utilisation d'accolades dans ce "cas")
la source
Vous dites que les accolades peuvent être omises car aucun nom de variable n'est réutilisé. En réutilisant les noms de variables, je suppose que vous entendez déclarer une nouvelle variable du même type.
Les accolades sont en fait les plus utiles pour vous assurer que vous ne finirez pas par réutiliser la même variable dans différents
case
s par erreur. Ils ne déclarent aucune variable aujourd'hui, mais quelqu'un les ajoutera demain et sans les accolades, le code est sujet aux erreurs.la source
Je n'utiliserais pas d'accolades pour les boîtiers de commutation.
L'instruction switch semble déjà assez baroque sans accolades.
Les boîtiers de commutation doivent être très courts. Lorsque vous devez déclarer des variables, c'est le signe que vous vous trompez.
Maintenant, passons au maintien d'un code C hérité qui utilise des boîtiers de plus de 500 lignes ...
la source
Je n'y ai jamais pensé auparavant. Je n'ai jamais eu besoin des accolades dans une clause case, donc je ne vois pas vraiment pourquoi vous en auriez besoin. Personnellement, je ne suis pas pour l'idée "Ce sera plus facile à maintenir", ce n'est que des ordures, ce sera plus facile à maintenir si le code a du sens et est documenté.
Pas d'accolades ... moins de syntaxe c'est plus
la source