81 votes

Cas de commutation Java : avec ou sans accolades ?

Considérons les deux extraits suivants, avec accolades :

switch (var) {
  case FOO: {
    x = x + 1;
    break;
  }

  case BAR: {
    y = y + 1;
    break;
  }
}

Sans appareil dentaire :

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 mettant chaque cas entre accolades. Toutefois, si chaque cas n'a pas besoin de la nouvelle portée (c'est-à-dire qu'aucun nom de variable n'est réutilisé), l'utilisation des accolades avec un cas est-elle pénalisante pour les performances ?

92voto

MrValdez Points 5159

Y a-t-il une sorte de pénalité de performance pour l'utilisation d'un appareil dentaire avec un boîtier ?

Aucun.

Les accolades sont là pour aider le compilateur à déterminer la portée d'une variable, d'une condition, d'une déclaration de fonction, etc. Elles n'affectent pas les performances d'exécution une fois que le code est compilé dans un exécutable.

20voto

TofuBeer Points 32441

Aucune pénalité de performance du point de vue de l'exécution.

Une légère pénalité de performance du point de vue de la compilation car il y a plus de choses à analyser, mais si quelqu'un était vraiment concerné, il devrait écrire son code sur une seule ligne :-)

Et maintenant pour la partie opinion de notre post... Je mets toujours les { et } parce qu'il y a une pénalité pour la maintenabilité dans la mesure où vous devrez probablement les mettre à une date ultérieure, et cela peut être une douleur de les mettre plus tard... mais c'est à 103% une préférence personnelle.

19voto

Travis Points 6062

Il s'agit d'un extrême exemple d'optimisation prématurée. Il serait plus judicieux de se préoccuper de savoir quelle méthode est la plus facile à lire et à déboguer.

12voto

Real Red. Points 2153

Comme nous le savons, les accolades pour les cas 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, d'une boucle, d'une déclaration de classe ou de l'initialisation d'un tableau, etc... Nous savons qu'un cas sort du bloc de commutation lorsqu'il rencontre une instruction break. Ainsi, l'utilisation d'accolades semble impliquer l'idée d'une portée différente pour les cas pour un lecteur ignorant. Il est donc préférable d'éviter d'utiliser les accolades pour une meilleure lisibilité de la programmation.

C'est-à-dire que lorsque j'ai quelque chose comme,

switch(i)
{
  case 1 :
  {
     //do something
  }
  System.out.println("Hello from 1");

  case 2: 
  ....
}

"Bonjour de 1" est imprimé. Mais l'utilisation de l'accolade peut suggérer à un lecteur ignorant que le cas se termine par '}', sachant déjà ce que les accolades signifient généralement dans le cas de boucles, de méthodes, etc.

Comme dans le cas des instructions "jump-to-label" en C, le contrôle passe simplement à la casse et continue son exécution. Ainsi, si l'on comprend bien, c'est une MAUVAISE pratique que d'utiliser des accolades lors de l'écriture de cas pour les commutateurs.

Techniquement parlant, vous pouvez entourer n'importe quel bloc de votre code d'une paire supplémentaire d'accolades lorsqu'elles sont utilisées avec une syntaxe valide. L'utilisation d'accolades dans les commutateurs n'est pas une mauvaise idée, du moins pour moi, car elle semble donner une impression différente, comme je l'ai dit plus haut.

Ma suggestion : Évitez d'utiliser les accolades pour les cas de commutation.

10voto

jklp Points 839

Avec des accolades.

Il y a tellement de choses qui peuvent mal tourner avec les déclarations d'interrupteurs que j'essaie de les éviter autant que possible.

  1. Oublier les pauses et donc avoir des chutes de cas
  2. L'oubli d'un cas par défaut et donc la non prise en compte d'une condition non prévue.
  3. Réutiliser accidentellement des variables entre les déclarations de cas, ou pire encore, affecter une variable qui EST en train de partager une variable entre les déclarations de cas.

L'utilisation d'accolades est un moyen d'empêcher le partage intentionnel ou accidentel de variables entre les instructions de cas.

Prograide.com

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.

Powered by:

X