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

Affichage des résultats du sondage: Quelle synthaxe préférez vous?

Votants
8. Vous ne pouvez pas participer à ce sondage.
  • Version 1 (pas de if else)

    5 62,50%
  • Version 2

    1 12,50%
  • Version 3

    0 0%
  • Autre

    2 25,00%
C# Discussion :

Quelle syntaxe préférez vous?


Sujet :

C#

  1. #1
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut Quelle syntaxe préférez vous?
    Version 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (value == null && value.Count<1) return null;
    if (value.Count == 1) return value[0];
    MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error)
    throw new FunctionalException (msg);
    Version 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (value == null && value.Count<1) return null;
    elseif (value.Count == 1) return value[0];
    else 
    {
        MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error)
        throw new FunctionalException (msg);
    }
    Version 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (value == null && value.Count<1) return null;
    else if (value.Count > 1) 
    {
        MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error)
        throw new FunctionalException (msg);
    }
    else return value[0];

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Citation Envoyé par BenoitM
    Quelle synthaxe préférez vous?
    Avant toute chose, je préfère la syntaxe sans H

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut
    Arf

    Je sais pas pourquoi je mets toujours un h, ca vient même pas de l'anglais

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    La première, parce que les else ne servent à rien. Avant j'aurais peut-être fait autrement, mais depuis que j'utilise Resharper il me signale tout le temps les else redondants

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (value == null && value.Count < 1)
        return null;
     
    if (value.Count > 1) 
    {
        MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error)
        throw new FunctionalException (msg);
    }
     
    return value[0];

  6. #6
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par tomlev Voir le message
    La première, parce que les else ne servent à rien. Avant j'aurais peut-être fait autrement, mais depuis que j'utilise Resharper il me signale tout le temps les else redondants
    Même chose. Resharper c'est bien pratique pour éliminer ce genre de petites crasses Comment j'ai pu vivre sans toutes ces années ?

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Un else inutile, je doute que ça change grand chose en terme de temps d'exécution.

    Même pire, je suis près à parier qu'avec un compilateur avancé tel que celui de .NET, il va être retiré.

    En revanche, pour améliorer la lisibilité du code, un bon else des familles avec une belle indentation, ça permet parfois de tiquer immédiatement "ah mais oui biensûr !"

    Du coup, je ne suis pas catégorique en ce qui concerne la suppression des else inutiles : pas toujours je pense.

    J'ai déjà eu à maintenir du code indenté de façon anarchique, et en l'absence de blocs convenablement indentés, c'est vide une galère immonde.

    Outre l'aspect lisibilité du code, j'ai aussi deux interrogations à propos des return toutes les deux lignes...

    Qu'en est-il des performances ?
    -> J'ai lu, il y a longtemps, peut-être à propos de VB6, qu'il vallait mieux faire un return en fin de fonction plutôt que X répartis dans le code, c'était mieux pour les performances.
    Est-ce applicable à .NET ?

    Et la maintenance alors ?
    -> Outre la lisibilité, le code doit être maintenable, et notamment pouvoir évoluer. Comment ajouter par exemple une trace "Valeur de retour : {0}" si dès qu'on connaît la valeur, on quitte la méthode ?

    Pour ces deux raisons, je m'efforce toujours de faire quelque-chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // Je préfère gérer les erreurs de paramètres en début de fonction
    if (value.Count > 1) 
    {
        MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error)
        throw new FunctionalException (msg);
    }
     
    // J'initialise une variable de retour avec une valeur par défaut
    int retval = DEFAULT_VALUE; // Dans notre exemple, c'est "null"
     
    if (value != null && value.Count == 1)
    {
        retval = value[0];
    }
     
    // Ici, je peux faire autant d'évolutions ou traces que je le désire
    return retval;
    Perso, je ne trouve pas ça moins lisible.

    A noter que le retval, en VB à l'époque, n'était pas obligatoire (en VB, on ne retourne pas une valeur : on affecte une valeur à la fonction, puis on quitte la fonction. Le même mécanisme existe aussi en C# si je ne m'abuse, mais est assez boudé, ce que je comprends (pas très lisible, d'autant qu'au niveau perfs, ça change absolument rien).

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Un else inutile, je doute que ça change grand chose en terme de temps d'exécution.

    Même pire, je suis près à parier qu'avec un compilateur avancé tel que celui de .NET, il va être retiré.
    Effectivement, en terme de perf ça change rien...

    Citation Envoyé par StringBuilder Voir le message
    En revanche, pour améliorer la lisibilité du code, un bon else des familles avec une belle indentation, ça permet parfois de tiquer immédiatement "ah mais oui biensûr !"
    Bah c'est assez subjectif... perso j'aime mieux sans le else. Par contre je mets l'instruction qui suit le if sur une nouvelle ligne, je trouve ça plus clair.

    Pour ce qui est de l'indentation foireuse, Visual Studio peut corriger ça avec juste un raccourci clavier...


    Par contre je viens de voir ça dans le code d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (value == null && value.Count<1) return null;
    Il faut faire un OU, pas un ET ! Avec ce code, si value est null, c'est une NullReferenceException garantie...

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut
    euh oui dans mon code c'est un ||

    j'ai finalement écrit le même code que StringBuilder de 15h51

    pour mettre au début du code les "return" invalides et à la fin le return valide

    J'ai lu, il y a longtemps, peut-être à propos de VB6, qu'il vallait mieux faire un return en fin de fonction plutôt que X répartis dans le code, c'était mieux pour les performances.
    Je préfère avoir un return au milieu et donc savoir que dans ce cas je peux arrêter de lire le reste du code.

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Aucune

    Je préfère une solution semblable à celle proposée par stringbuilder, surtout parceque les return au milieu d'une fonction sont à éviter

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (value!=null &&  value.Count>1)
    { 
       MessageMetier msg = new MessageMetier("Pas de résultat unique",NiveauMessageMetier.Error) ;
       throw new FunctionalException (msg);
    }
    return value == null || value.Count<1 ? null : value[0];
    Concernant l'utilisation des return, je conseille par expérience de n'en mettre qu'un seul en fin de procédure. Ne l'ayant pas fait pendant mes dix premières années de déveloopement, puis ayant adopté cette pratique depuis longtemps maintenant, je ne peux que m'en féliciter.

    Par analogie à Pascal dans lequel le retour se fait via le mot réservé "Result", nous nommons dans toutes les fonctions (non void) la variable de retour "Result". En permettant d'identifier immédiatement la variable de retour quelquesoit la fonction, cela facilite la maintenance.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public int sum(int a, int b) 
    {
      int Result=a+b ;
      return Result ;
    }

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

Discussions similaires

  1. Quelle licence préférez-vous pour vos applications ?
    Par zoom61 dans le forum Logiciels Libres & Open Source
    Réponses: 41
    Dernier message: 08/07/2014, 11h55
  2. Quelle série TV préférez-vous?
    Par fally dans le forum Films & TV
    Réponses: 80
    Dernier message: 19/08/2008, 19h19
  3. Quelle présentation préférez vous ?
    Par Coocky10 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/01/2008, 15h43
  4. Quelle page de FAQ préférez-vous / est la plus utile ?
    Par khayyam90 dans le forum Evolutions du club
    Réponses: 10
    Dernier message: 13/09/2006, 22h22

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