Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

C++11 a fait évoluer le for... Y aura-t-il des évos pour le switch ?

Humeur du soir bonsoir !

J'ai été heureux d'apprendre que le c++11 avait introduit une syntaxe du for qui rend inutile le foreach de Qt. C++ prend enfin de la hauteur, c'est bien !
Hélas le switch préhistorique n'a pas bougé.

À quand un switch du genre
switch (value)

case ( <0) : ...
case 0: ...
case 1: ...
case_range (2, 10): ... // value >= 2 && value <= 10
default: ...
... qui remplacerait les si peu élégants if...else imbriqués ?

Réponses

  • A ma connaissance, rien de prévu. Je ne crois même pas que ça était proposé. Probablement pour des problèmes de compatibilité du code. (HS : Et j'ai aussi l'impression que les nouveaux langages ne proposent pas forcement de switch, non ? Cf Python par exemple)
  • Tu es sûr pour les problèmes de compatibilité ? les nouvelles syntaxes du for n'en ont pas posé ?
    Je ne connais pas (ou plus) d'autre langage. Je viens de voir que VB propose un select...case assez étendu, et surtout très lisible car tous les cas envisagés dans le select ont le même niveau d'indentation, ce qui n'est pas le cas avec des if...else imbriqués.

    Voilà. Ce n'est pas si grave, c'est juste dommage.
  • January 2016 modifié
    Cela va dépendre des syntaxes proposées j'imagine (ok, je botte en touche...)

    J'ai regardé rapidement sur https://groups.google.com/a/isocpp.org/forum/#!forumsearch/, mais je n'ai rien trouvé. Demande peut être là bas, il y a peut être des discussions antérieures sur le sujet.

    EDIT : après quelques recherche (avec "c++ switch bad practice"), il semblerait que switch est tout simplement considéré comme une mauvaise pratique (je savais pas...). Cf "clean code" de Martin.
  • Ok on a
    //	switch (a)
    if (a == 0) // case 0
    {
    qDebug () << "a = 0";
    }
    else if (a == 1) // case 1
    {
    qDebug () << "a = 1";
    }
    else if (a >= 2 && a <= 10) // case range 2,10
    {
    qDebug () << "entre 2 et 10";
    }
    else // default
    {
    qDebug () << "a < 0 ou > 10";
    }
    mais c'est pas joli !!!!
  • Comme ca, c'est plus joli :
    //	switch (a)
    if (a == 0) { // case 0
    qDebug () << "a = 0";
    }
    else if (a == 1) { // case 1
    qDebug () << "a = 1";
    }
    else if (a >= 2 && a <= 10) { // case range 2,10
    qDebug () << "entre 2 et 10";
    }
    else { // default
    qDebug () << "a < 0 ou > 10";
    }
    :D

    Mais plus sérieusement, oui, ce n'est pas très joli (assez verbeux).

    Note : une des critiques que l'on fait (a priori) sur le switch, c'est que l'on peut facilement faire une erreur est louper un case. Il est proposé dans C++17 un "safe switch", pour éviter cela.

    Mais honnêtement, n’hésites pas a poser la question sur le forum du comité.
  • January 2016 modifié
    Ok merci. Je vois bien que le switch est à l'instar du goto une instruction boiteuse et encombrante qui date du C et que personne n'a osé euthanasier

    Juste un truc sur la position de l'accolade ouvrante : j'hésite encore !!! je n'ai jamais décidé une bonne fois pour toutes de la mettre à la suite du if ou en-dessous. ;)
  • Moi, j'ai décidé de laisser clang-format faire le boulot de mise en forme a ma place :)
Connectez-vous ou Inscrivez-vous pour répondre.