IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Algorithmie et BREAK, RETURN.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Par défaut Algorithmie et BREAK, RETURN.
    Bonjour à tous,

    Je développe depuis quelques années maintenant mais je me posais une petite question.
    Depuis toujours mes professeurs me disent qu'un 'break' n'est pas algorithmiquement correct.

    En langage C, je m'efforce donc de faire:

    unsigned char b = 0;
    while(b==0 && ...)
    if(...)b=1;

    alors qu'il serait possible de faire:
    for(...)if(...)break;

    Pour l'ordinateur, la solution que j'utilise, c'est à l'évidence un test à faire en plus à chaque tour à l'inverse du break qui permettrait de sortir directement.

    Alors... faut-il bannir le break ? Est-ce impropre ?

    Merci beaucoup,
    devback

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Ma préférence va largement au break, et je pense que c'est le cas de beaucoup de monde.

    Ce que l'on reproche généralement au break, c'est un peu le même procès que l'on tient à goto, mais ce n'est pas valable car cela ne brise pas le concept de programmation structurée : on sait toujours où on va sortir même si la boucle évolue, et on sait toujours pourquoi.

    Ces récriminations peuvent être justifiées s'il y a des post-conditions à l'intérieur de la boucle qui imposent qu'un cycle se finisse proprement (comme par exemple l'ouverture et la re-fermeture d'un fichier) mais, dans ce cas, c'est au programmeur de faire le bon choix.

    Personnellement, je trouve que remplacer un break statique et connu à la compilation par un booléen en mémoire dont la valeur dépend du contexte à l'exécution, c'est un remède bien pire que le mal.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ha !!! le débat théoriciens contre praticiens.

    Le débat sur le break (et aussi le continue qui doit être du même ordre d'idée) rejoint le débat du goto (à un moindre niveau tout de même).

    Je suis développeur et à ce titre, je suis amené à écrire du code mais surtout , à le relire.

    Ce qui m'importe le plus lors de cette relecture, c'est d'avoir une structure de code facile à lire et à comprendre.

    Les tests tels que tu les décrits "while(b==0 && ...)" sont parfois illisibles et il vaut mieux alors un "break" (ou "continue") bien placé qui améliore la compréhension et la relecture du code.

    Pour moi, lorsque j'écris, je ne m'interdit jamais un "break" ou un "continue" si cela doit simplifier le code au risque de choquer les théoriciens du langage. Il m'est même arrivé d'écrire des instructions "goto" (oui oui, j'assume) car dans certains cas (gestion des erreurs principalement), cela simplifiait vraiment beaucoup la structure de code.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Il m'est même arrivé d'écrire des instructions "goto" (oui oui, j'assume) car dans certains cas (gestion des erreurs principalement), cela simplifiait vraiment beaucoup la structure de code.
    Autant je suis totalement d'accord pour les break et continue, autant pour les erreurs et des goto pas du tout...

    Un simple codage des erreurs incrémental (par exemple négatif), et un break ou un if suffit..

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    'faudrait surtout militer pour une réhabilitation propre et encadrée, dans les écoles, de l'usage du goto et autres artifices parce qu'ils ont beau être souvent révélateurs de mauvaises pratiques, ils sont loins d'être les abominations que l'on prétend.

    Je crois que c'est le bon moment pour placer ceci :
    Images attachées Images attachées  

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    encore une fois, je proteste par rapport aux goto, mais sinon effectivement "l'abomination des breaks et continue" va assez bien avec les règles du style "une fonction de pas plus de 50 lignes", "une fonction ne contenant qu'un if", "une fonction par fichier", et autres...

    Bref toutes choses dont l'application stricte , bien que vue de temps en temps dans les gros projets, n'en est pas moins une abomination de maintenance... et de programmation... (et quelques fois de conception)

    Mais nous sommes tous des c.ns, n'est-ce pas... et des c.ns remplaçables par d'autres c.ns..

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il y a une grande différence entre les instructions entrainant la rupture du flux "normal" des instructions : d'une part break, continue et return et d'autre part goto. Pour les premières, on sait immédiatement où va se poursuivre l'exécution du programme sans avoir à explorer le reste du code. Il n'y a pas rupture pour le lecteur dans son examen du code et elles affectent donc beaucoup moins la lisibilité du code que ce que fait un goto.

Discussions similaires

  1. [pl/pgSQL 7.2] Returns Opaque?
    Par Gruik dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/10/2003, 16h50
  2. return ();exit() ;
    Par Zazeglu dans le forum C
    Réponses: 12
    Dernier message: 10/10/2003, 20h56
  3. [C#] Changer le focus avec la touche return
    Par sblanc74 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2003, 18h38
  4. return
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 18/09/2003, 22h36
  5. [LG]Pause de programme ou Break time
    Par lvdnono dans le forum Langage
    Réponses: 11
    Dernier message: 17/05/2003, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo