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 :

[Exceptions] Relancer la fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Exceptions] Relancer la fonction
    Bonjour à tous!

    Le code ici est du code métier et n'a que peu d'intérêt. Ce que je voudrais faire, c'est une sorte de RETRY pour relancer la fonction avec des valeurs plus correctes, lorsqu'une exception est levée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Camera::setNumeroCamera(int numero_cam)
    {
    	try {
    		vigra_precondition( (numero_cam > 0) && (numero_cam < 12 ), "Mauvais numéro de caméra");
    		numero_camera = numero_cam;
    	}
    	catch (std::exception & e)
    	{
    		std::cerr << e.what() << std::endl;
    		numero_cam = 9; // j'ai remis une bonne valeur
                    retry();
    	}
    }
    Comment faire en C++ ?

    Merci!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je connaissais quelqu'un qui avait pour habitude de faire sans arret comme ça en pl/sql. Bon ben, suffit de relancer la fonction en l'appelant par son nom. Mais pour ma part, j'aurais plutot tendance à tester les valeurs puis les modifier si nécessaire (ou mieux, ne pas les modifier, le programmeur qui appelle une fonction n'a qu'à passer les bons paramètres).

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par zais_ethael
    Je connaissais quelqu'un qui avait pour habitude de faire sans arret comme ça en pl/sql. Bon ben, suffit de relancer la fonction en l'appelant par son nom. Mais pour ma part, j'aurais plutot tendance à tester les valeurs puis les modifier si nécessaire (ou mieux, ne pas les modifier, le programmeur qui appelle une fonction n'a qu'à passer les bons paramètres).
    Certains paramètres sont assez difficiles à prévoir, même dans une conception par contrat bien définie... C'est pour ça que les exceptions existent!

    Ce qui est sûr, c'est que laisser le programme se planter est quand même une moins bonne solution que d'essayer de corriger l'état du système.

    Relancer la fonction... c'est tout con j'y avais pas pensé!

    J'aurai pensé qu'il existait un truc plus "subtil"...

    Merci Zais!

  4. #4
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Mon point de vue:
    - Les exceptions ne sont là que pour gérer les erreurs
    - Les exceptions système ne sont pas obligé d'être catcher ( programme plante mais de tout façon qu'est que l'on pourrai faire de mieux ? )
    - Ne jamais mètre un bloc catch vide

    Pour ton problème, il me semble donc que tu ne devrais pas gérer ceci comme une exception, ceci ressemble même plus a un assert. Mais si tu veux utiliser un try catch je vois rien de mieux qu'une boucle while.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par themadmax
    - Les exceptions système ne sont pas obligé d'être catcher ( programme plante mais de tout façon qu'est que l'on pourrai faire de mieux ? )
    Une meilleure conception est ce qu'on pourrait faire de mieux.
    En tant que fournisseur, on n'est effectivement pas responsable des erreurs du client qui appellerait nos routines en violant nos préconditions.
    Mais on est responsable de l'état de sortie de notre système lorsque le client joue le jeu.

    De plus, je pense qu'on se doit de faire un effort pour essayer de remettre d'aplomb un programme qui part de travers en appelant de nouveau la routine avec des arguments plus "corrects" (dans la mesure du possible bien entendu )

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Mouais.
    Aujourd'hui, je suis plus un partisant de :
    - plantage assuré par un assert pour les erreurs de programmation/conception
    - exception pour les erreurs liées au contexte d'exécution

    Relancer la fonction avec de meilleurs paramètres ? Certainement pas. Rien qu'avec l'heuristique de détermination de nouvelles valeurs, il y a encore moyen de lever toujours plus d'exceptons. L'assistanat à ses limites.
    Qu'ils lisent la doc plutôt et revoient leur code plutôt.

    Une erreur bloquante et claire qui explique ce qui ne va pas est 100 préférable à un programme qui continue de fonctionner avec des valeurs altérées à l'insu de l'utilisateur. Car il y a de quoi en perdre du temps avant de trouver l'origine d'un bug aussi viceux que "mais pourquoi les valeurs sont incohérentes par rapport à mes entrées" quand on fait tout pour continuer de fonctionner.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. relancer une fonction en cours d'execution
    Par flyingfr53 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/07/2011, 09h13
  2. [MySQL] Faire une relance en fonctions d'une date
    Par sovo dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/09/2009, 10h26
  3. [JQuery + JSP]Comment relancer une fonction sur un load ?
    Par GrooveRage dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/02/2009, 18h21
  4. relancer une fonction après un reload
    Par cijez dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/06/2007, 13h36
  5. Réponses: 5
    Dernier message: 25/03/2007, 06h06

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