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 :

[c#] Bonne ou mauvaise exécution d'une méthode. Que vaut-il mieux faire ?


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut [c#] Bonne ou mauvaise exécution d'une méthode. Que vaut-il mieux faire ?
    Bonjour,

    je m'interroge sur un point.
    J'ai une méthode qui doit ajouter un objet dans une liste si celui-ci n'existe pas déjà dans la liste.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    void AddObject ( MyClass obj);

    Si l'objet a été ajouté à la liste, il faut l'indiquer à l'objet appelant pour qu'il effectue une action.
    Si l'objet n'a pas été ajouté à la liste, il faut aussi l'indiquer à l'objet appelant pour qu'il effectue une autre action.

    Que vaut-il mieux faire ?
    Utiliser un paramètre de retour de type bool:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (AddObject(myObj))
          DoAThing();
    else
          DoOtherThing();

    Ou vaut-il mieux modifier la référence de l'objet pour la faire pointer vers nulle:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    AddObject(ref myObj);
     
    if (myObj==null)
         DoAThing();
    else
         DoOtherThing();

    Ou vaut-il mieux lancer une exception ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
          AddObject(myObj);
          DoAThing();
    }
    catch (AddObjectException ex)
    {
          DoOtherThing();
    }

    avec
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class AddObjectException:Exception
    {
        [..]
    }

    Pourriez-vous m'éclairer sur ce point ?

    Merci bien à vous.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Avec ce que tu demandes, j'opterais pour le booléen: c'est le plus rapide à mettre en oeuvre.

    L'idée de l'exception est pas mal non plus, mais d'après moi uniquement utile si tu comptes réutiliser ta classe d'exception plus tard

  3. #3
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Merci bien pour la réponse.

    J'avais peur que le booleen fasse plus langage procédural comme le C et pas trop objet.

    Je ne pense pas réutiliser l'exception MyObjectException.
    J'ai mis cette exception juste pour l'exemple. Je pourrais tout aussi bien mettre simplement Exception plutôt que MyObjectException.

    Donc dans ce cas, vu sous cet angle, tu me conseillerais d'utiliser le try catch même si comme je l'ai aussi toujours lu try catch est plus long à l'execution.
    En fait, ne serait-ce pas une question d'habitude d'utilisation. Certains préféront utiliser l'exception, d'autre le retour booleen ?

  4. #4
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Pour faire court, le try catch pour gerer un comportement normal de ton application, c'est non non non! Une application dans son mode de fonctionnement normal NE DOIT PAS lancer d'exception. Outre la baisse de perfs, semantiquement parlant ...ben c'est pas bien , une levee d'exception doit se produire exceptionnellement (ce qui n'empeche pas d'utiliser le try catch pour blinder son code). Si t'es dans une methode de validation quel est l'interet de lever une exception pour traiter un de tes cas a valider?

    Le booleen est une meilleure solution dans ton cas
    Ce que tu peux faire aussi c'est utiliser une hashlist ou dictionary, avec comme cle ton objet: tu verifies si ton objet est deja present dans le dictionnaire et tu l'ajoutes si necessaire.

  5. #5
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Ok je te remercie bien pour cette réponse fort interessante.

    Citation Envoyé par Nip
    Pour faire court, le try catch pour gerer un comportement normal de ton application, c'est non non non! Une application dans son mode de fonctionnement normal NE DOIT PAS lancer d'exception.
    Maintenant que tu m'en parles, je l'avais lu.
    .NET 2.0 et C#2 Livre très interessant acheté suite aux conseils sur ce site de Morpheus.

    Bah en tout cas merci encore.

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

Discussions similaires

  1. Limiter le temps d'exécution d'une méthode
    Par nono_31 dans le forum Général Java
    Réponses: 9
    Dernier message: 16/08/2007, 15h46
  2. Exécution d'une méthode dans Page_Load
    Par Definol dans le forum ASP.NET
    Réponses: 6
    Dernier message: 17/07/2007, 15h09
  3. [JAVA]Ralentir l'exécution d'une méthode
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/03/2007, 10h48
  4. mauvaise exécution d'une requête
    Par romrai dans le forum Access
    Réponses: 6
    Dernier message: 02/06/2006, 09h55
  5. Non exécution d'une méthode repaint()
    Par Flophx dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 05/05/2006, 18h04

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