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

  1. #1
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : juillet 2006
    Messages : 111
    Points : 52
    Points
    52

    Par défaut Existe-t-il des normes de programmation générale ?

    Bonjour,

    Je suis actuellement sur un projet interne de mon entreprise où j'ai des spécifications fonctionnelle sur mon application.

    Avec l'objectif de dévellopper un système performant, tant au niveau du traitement des données que de la maintenance, je voudrais savoir s'il existe des normes de programmation générales.

    Par exemple:
    - Nombre de caractères max d'une ligne
    - Nombre de lignes d'une classe (dans le cas du java ou de perl par exemple)

    Je sais que chaque language est différent et que sans doute il n'existe pas de normes générales.
    J'ai déjà travaillé sur d'autre projets où les "normes" étaient en fait des spécifications propres à chaque projet.

    L'objectif pour moi serait d'avoir une idée, savoir s'il existe quelquechose ou si je doit me créer mes propres spec.

    Merci d'avance.

    Mat

  2. #2
    Nouveau membre du Club
    Inscrit en
    février 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : février 2007
    Messages : 33
    Points : 33
    Points
    33

    Par défaut

    salut,
    commence par codé avec une norme.
    bonne chance
    voici un petit exemple de celui de mon entrepris :
    3.1.2. Les variables
    Le nom d'une variable est composé selon la nomenclature suivante :

    i_tVariableName
    Le préfixe « i » désigne l’indicateur de portée.
    g : variable locale à une application
    s : variable locale à un module.
    p : variable passée en paramètre d’une fonction ou d’une méthode de classe.
    « t » représente l’indicateur de type de la variable. On utilisera les indicateurs de type définis en annexe (cf. § Annexe 1). Pour les types non répertoriés en annexe ou les types propriétaires, inventer un indicateur de type parlant ou bien supprimer l’indicateur de type (conserver les préfixes pointeurs et tableaux).
    « VariableName » est le nom de la variable. Ce nom, écrit en anglais, doit permettre de déterminer ce que la variable représente. Il est composé d’un ou plusieurs mots en minuscule commençant par une majuscule.

    Notes :
    Les variables doivent obligatoirement être initialisées à une valeur par défaut lors de leur déclaration.
    Les membres de classe doivent être obligatoirement initialisés dans tous les constructeurs de la classe.

    Exemples : int i = 0 ;
    char *pszText = NULL ;
    bool bTest = false ;

    Les variables locales
    Les variables locales à une fonction ou une méthode de classe ne possèdent pas d’indicateur de portée. Certaines variables, tels les indices de boucle, ne sont pas soumis aux règles d’identification des variables.

    Exemples : int i = 0 ;
    char *pszText = NULL ;

    Les pointeurs
    Si une variable est un pointeur, on ajoute le préfixe « p » à l’indicateur de type de la variable.
    Exemple : long *plValue = NULL ;

    Les tableaux
    Si une variable est un tableau, on ajoute le préfixe « a » à l’indicateur de type de la variable.

    Exemple : long alValues[100];

    Les constantes
    Si une variable est constante, on ajoute le préfixe « k » à l’indicateur de type de la variable.

    Exemple : const long klValue = 10;

    Les membres de classe C++
    Le nom d’un membre de classe C++ est préfixé par l’indicateur de portée « m ». Si le membre de classe est statique, l’indicateur de portée devient « s ».

    Exemple : class CMyClass {
    protected :
    long m_lMember ; // membre de classe
    long s_lCount ; // membre de classe statique
    } ;

    Eviter au maximum les membres de classe publics. Privilégier des membres privés ou protégés et définir des accesseurs associés.

    Exemple : class CMyClass {
    protected :
    long m_lMember ; // membre de classe
    long s_lCount ; // membre de classe statique
    public :
    long GetMember()
    } ;
    long CMyClass ::GetMember()
    {
    return m_lMember ;
    }

  3. #3
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : avril 2004
    Messages : 679
    Points : 803
    Points
    803

    Par défaut

    Citation Envoyé par Matmal11 Voir le message
    Bonjour,

    Je suis actuellement sur un projet interne de mon entreprise où j'ai des spécifications fonctionnelle sur mon application.

    Avec l'objectif de dévellopper un système performant, tant au niveau du traitement des données que de la maintenance, je voudrais savoir s'il existe des normes de programmation générales.

    Par exemple:
    - Nombre de caractères max d'une ligne
    - Nombre de lignes d'une classe (dans le cas du java ou de perl par exemple)

    Je sais que chaque language est différent et que sans doute il n'existe pas de normes générales.
    J'ai déjà travaillé sur d'autre projets où les "normes" étaient en fait des spécifications propres à chaque projet.

    L'objectif pour moi serait d'avoir une idée, savoir s'il existe quelquechose ou si je doit me créer mes propres spec.

    Merci d'avance.

    Mat
    Lis "Perl Best Practices" par Damian Conway. Tous les points sont abordés en profondeurs. Beaucoup sont également transférables à d'autres langages.

  4. #4
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2002
    Messages : 287
    Points : 169
    Points
    169

    Par défaut

    Tu as les normes de Sun qui ont l'avantage d'être présentes sur beaucoup de projets. Pour t'assurer que tu es conforme tu peux utiliser checkstyle.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 592
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 592
    Points : 17 241
    Points
    17 241
    Billets dans le blog
    2

    Par défaut

    Tu as plusieurs discussions traitant de règles simples :

    http://www.developpez.net/forums/sho...d.php?t=387695

    http://www.developpez.net/forums/sho...d.php?t=376119

    Il y en a d'autres aussi..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    mai 2006
    Messages
    779
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mai 2006
    Messages : 779
    Points : 1 162
    Points
    1 162

    Par défaut

    Citation Envoyé par lykim1982 Voir le message
    salut,
    commence par codé avec une norme.
    bonne chance
    voici un petit exemple de celui de mon entrepris :
    et tu te retrouves avec du code genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string strMaStr = "";
    Je partage ta douleur.

    une vieille norme C adaptée vite fait au C++, c'est à fuir.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    Consultant informatique
    Inscrit en
    octobre 2004
    Messages
    10 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : octobre 2004
    Messages : 10 964
    Points : 26 541
    Points
    26 541

    Par défaut

    Salut,

    De manière tout à fait générale, on peut estimer que:

    1. 80 colonnes par ligne, c'est amplement suffisant
    2. plus de 50 linges par fonction, ça commence vraiment à faire beaucoup
    3. les noms (de variables, de fonctions, de type...) doivent être explicites
    4. il vaut mieux préférer un codage "verbeux" (if(ptr==NULL) de préférence à if(!ptr) )
    5. les représentations de noms doivent être fortement codifiée (présence de majuscule à certains endroits...)
    6. Les notations hongroises et autres similaires sont généralement de nature à embrouiller plus qu'elles n'aident à la compréhension
    7. Les commentaires "utiles" sont importants, mais il est préférable d'éviter ceux qui n'apportent rien

    Le (1)et le (2) peuvent demander quelques explications:

    Typiquement, les différentes consoles permettent de travailler sur 25 lignes de 80 colonnes, et il existe même des langages qui considère tout ce qui se trouve au-delà de la colonne 80 comme des commentaires (COBOL, par exemple)

    Le fait de limiter le nombre de colonnes, outre le fait d'éviter qu'une partie ne soit considérée comme un commentaire, permettra d'éviter un affichage sous la forme de
    (alors que le terme est lavariable), et le fait de limiter à 50 lignes permettra de ne nécessiter que deux "pages" pour avoir un aperçu de la fonction complète... ce qui en soit est déjà beaucoup

    Pour ce qui est des commentaires, les commentaire utiles pourraient être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* La fonction qui fait ...
     * @ in: argument1: (utilité)
     *       argument2: (utilité)
     *     ...
     * @ out: valeur renvoyée
     */
    parce qu'il permettent de comprendre "facilement" ce qui est fait.

    Par contre un commentaire inutile est du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(a>0) //si a est plus grand que 0
        a++; //on incrémente a
    car il n'apporte aucune information pertinente: peut être aurait-il eu sa raison d'être si on avait précisé pourquoi a doit être plus grand (ou plus petit ou égal) à 0, mais ce n'est pas le cas...

    J'aime particulièrement l'échelle de goret, même si je laisse à chacun le droit de ne pas être d'accord avec les points de vues exposés
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    mai 2006
    Messages
    779
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : mai 2006
    Messages : 779
    Points : 1 162
    Points
    1 162

    Par défaut

    les 80 colonnes par lignes, en 2007, avec les langages modernes, les IDE modernes et les écrans modernes, je préfère que ça soit purement indicatif et pas du tout une obligation à respecter à la lettre.

    Ne pas faire de longues lignes, certes, mais si on dépasse de 10 caractères... et bien tant pis, c'est pas grave.

    Si dans les règles de codage il y a marqué qu'il faut utiliser une notation hongroise super verbeuse et en plus une limitation sur la longueur des lignes, plus des indentations/ajout d'espaces pas toujours heureux, ya moyen que les développeurs pètent un cable.

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    Consultant informatique
    Inscrit en
    octobre 2004
    Messages
    10 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : octobre 2004
    Messages : 10 964
    Points : 26 541
    Points
    26 541

    Par défaut

    Penses quand même aussi au fait que de nombreux code sources risquent d'être imprimés...

    Comme les polices utilisées dans ce cas sont souvent à taille fixe (un "i" prend la même largeur qu'un "u"), souvent imprimés en taille 10 ou 12, l'écran n'est qu'à titre indicatif, mais le raisonnement peut très bien être suivi pour ce qui est de l'impression...

    Le problème devient en outre de plus en plus criant si l'on décide, afin d'économiser le papier, d'imprimer deux pages sur une feuille A4 (en recto/verso, cela nous permet l'obtention d'un bouquin très sympa )

    Tu remarqueras en outre que, de mon côté, et bien que je ne l'ai pas dit explicitement, je déconseille fortement la notation hongroise (ben voila... c'est fait maintenant )

    Et j'ai en outre oublié de parler d'une indentation rigoureuse, qui permet de repérer rapidement les différents blocs d'instructions
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 592
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 592
    Points : 17 241
    Points
    17 241
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par koala01 Voir le message
    Penses quand même aussi au fait que de nombreux code sources risquent d'être imprimés...

    Comme les polices utilisées dans ce cas sont souvent à taille fixe (un "i" prend la même largeur qu'un "u"), souvent imprimés en taille 10 ou 12, l'écran n'est qu'à titre indicatif, mais le raisonnement peut très bien être suivi pour ce qui est de l'impression...

    Le problème devient en outre de plus en plus criant si l'on décide, afin d'économiser le papier, d'imprimer deux pages sur une feuille A4 (en recto/verso, cela nous permet l'obtention d'un bouquin très sympa )
    je dois dire que d'ailleurs, moi qui suis un "vieux", et qui de plus ai fait de l'ergonomie, je ne résiste pas à vous rappeller à tous que la "nouveauté technologique" des imprimantes page à page (laser ou autres) a de facto supprimé un outil magnifique d'informaticien, qui était l'imprimante à feuille continue (perforée sur les côtés), permettant de voir d'un coup un programme, une série de boucles imbriquées, etc etc...

    Ce qui fait d'ailleurs que pratiquement plus personne n'imprime un programme, que ce soit les coupures à 66 lignes ou à 80 caractères n'étant pas adaptées...

    Sinon je suis entièrement d'accord avec koala01. J'ajouterais un élément et une nuance.

    L'élément ajouté serait :

    EVITER les variables globales. Et si il est impossible de les éviter, en avoir le moins possibles, et LOCALES à un module.

    Enfin la nuance serait :

    Bien que les normes "générales" (et la pratique) indiquent globalement qu'effectivement une fonction de plus de 50 lignes est à proscrire, ainsi qu'une fonction possédant plus qu'une boucle ou qu'un if, non seulement la dernière proposition est rarement atteinte dans un code opérationnel, mais de plus dans certains cas bien précis, il est illusoire (voire beaucoup trop compliqué) de vouloir suivre la première règle.

    J'ai travaillé sur d'énormes projets, et en général la moyenne des fonctions "complexes" s'établit plutôt vers 100 à 200 lignes (commentaires inclus), avec quelques cas particuliers pouvant s'élever à 700 à 1000 lignes (sur un logiciel de 700 000 lignes par exemple, j'ai eu 2 fonctions de 1200 lignes, dont la "séparation" aurait coûté beaucoup plus cher en variables, conception, et oberhead). Cependant, ce ne sont que des exceptions.

    Les grandes règles sont celles énoncées plus haut par koala01 ainsi que dans les discussions et liens fournis.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #11
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 431
    Points : 305
    Points
    305

    Par défaut

    Salut à tous

    Citation Envoyé par souviron34 Voir le message
    EVITER les variables globales. Et si il est impossible de les éviter, en avoir le moins possibles, et LOCALES à un module.
    Pourquoi ? pour des raisons de taille mémoire ? de sécurité ?

    (Pardonnez mon ignorance flagrante )

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    Consultant informatique
    Inscrit en
    octobre 2004
    Messages
    10 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : octobre 2004
    Messages : 10 964
    Points : 26 541
    Points
    26 541

    Par défaut

    En fait, c'est surtout parce qu'il est particulièrement facile de faire une co avec les variables globales:

    Pour peu que tu ne soit pas assez attentif, par exemple, à l'ordre d'appel des fonctions, tu as très vite fait de te retrouver avec une variable dans un état incohérent
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 239
    Points : 8 525
    Points
    8 525

    Par défaut

    Citation Envoyé par Chatbour Voir le message
    EVITER les variables globales. Et si il est impossible de les éviter, en avoir le moins possibles, et LOCALES à un module.
    Pourquoi ? pour des raisons de taille mémoire ? de sécurité ?
    Parce que les variables globales sont le mal(TM), elles encombrent l'espace des noms, elles affectent l'ensemble de l'application (ou du module) et de ce fait rendent considérablement plus difficile le déboguage (puiqu'un bug qui se produit après l'utilisation de cette variable globale peut venir d'à peu près n'importe où où l'on affecte à cette variable. De plus les variables globales reviennent vous hanter lorsque vous tentez de rendre votre librairie réentrante... Plus une variable est localisée moins elle est susceptible de poser des problème ou de rendre le déboguage difficile.

    Le paradigme de programmation fonctionnel pousse cette idée encore plus loin en supprimant tout simplement la notion de variable, il n'y a que des valeurs immuables, une fonction prend une valeur en paramètre et renvoie une nouvelle valeur (entièrement déterminé par l'entrée, pas de fonction dont la sortie dépende du moment où on l'appelle). On peut toujours attacher des étiquettes aux valeurs bien sûr, mais une fois que c'est fait, on ne peut plus changer la valeur attachée à l'étiquette. Bien que cela demande un temps d'adaptation aux habitués de l'impératif, ce mode de programmation s'avère tout aussi pratique quand on y est habitué et supprime bien des causes de bugs.
    Tu peux aller voir le forum consacré à ces langages fonctionnels pour plus de détails, en particulier ce sujet est intéressant (compare la taille et la complexité des implémentations impératives et fonctionnelles du même algorithme, d'ailleurs l'un des programmes les plus rapides en impératif s'est avéré contenir des bugs subtils...).

    --
    Jedaï

  14. #14
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 431
    Points : 305
    Points
    305

    Par défaut

    Merci beaucoup Jedai et koala01 pour les explications
    et merci pour votre disponibilité pour aider les autres.

  15. #15
    Membre du Club Avatar de Matmal11
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : juillet 2006
    Messages : 111
    Points : 52
    Points
    52

    Par défaut

    Merci à tous pour ces explications ,

    Mat

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 592
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 592
    Points : 17 241
    Points
    17 241
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par Chatbour Voir le message
    Salut à tous


    Pourquoi ? pour des raisons de taille mémoire ? de sécurité ?

    (Pardonnez mon ignorance flagrante )

    Et j'ajouterais par rapport aux 2 posts précédents tout à fait clairs qu'un autre inconvénient majeur des variables globales (surtout non locales au module), est que leur NOM est accessible à travers tout le logiciel. Par conséquent rien ne garanti ni l'intégrité des valeurs, ni même le typage et l'usage qui peut en être fait....

    Il est relativement classique d'avoir un nombre TRES RESTREINT de variables locales globales dans un module, mais il est ABSOLUMENT FORTEMENT DECONSEILLE d'en utiliser à travers plusieurs modules (la solution étant ce qu'a donné Jedai..)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  17. #17
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    5 227
    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 227
    Points : 10 632
    Points
    10 632

    Par défaut

    Citation Envoyé par nikko34 Voir le message
    a- les 80 colonnes par lignes, en 2007, avec les langages modernes, les IDE modernes et les écrans modernes, je préfère que ça soit purement indicatif et pas du tout une obligation à respecter à la lettre.

    b- Si dans les règles de codage il y a marqué qu'il faut utiliser une notation hongroise super verbeuse et en plus une limitation sur la longueur des lignes, plus des indentations/ajout d'espaces pas toujours heureux, ya moyen que les développeurs pètent un cable.
    a- Cela continue a voir des avantages certains :
    - pouvoir splitter verticalement son éditeur pour avoir le .h à droite, le .cpp à gauche, et éventuellement d'autres colonnes pour d'autres choses
    - L'impression n'est pas saccagée, et le rendu final sera homogène quelque soit le source imprimé (toujours la même taille de police)
    - Certains outils ne gèrent pas super bien les dépassements (je pense à doxygen)

    Et de toutes façons, avec un éditeur intelligent capable de replier le code, il est toujours possible de se rajouter des replis customisés qui vont condenser sur une même ligne tous les arguments d'un appel un tant soit peu long.

    b- Ne confondez pas la notation hongroise avec ce qu'elle n'est pas.
    http://www.joelonsoftware.com/articles/Wrong.html
    Dans les langages trop faiblement typés, ou quand on n'a pas envie de définir un type pour chaque entité numérique (ligne, colone), ou quand on manipule une même chose mais typée différemment (entier, enum, chaine native, chaine corba, ...), la notation hongroise a son intérêt.
    Il ne faut pas la rejeter d'emblée pour cause d'abus massif suite à mauvaise compréhension généralisée.
    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...

  18. #18
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : avril 2007
    Messages : 561
    Points : 800
    Points
    800

    Par défaut

    Citation Envoyé par koala01 Voir le message

    1. plus de 50 linges par fonction, ça commence vraiment à faire beaucoup
    2. il vaut mieux préférer un codage "verbeux" (if(ptr==NULL) de préférence à if(!ptr) )

    Je suis tombé par hasard sur cette vielle discussion et je dois dire que je suis moyennement d'accord avec les points cités plus haut.
    Si tu écris une fonction qui dépasse les 50 lignes, que faire ? Découper cette fonction en sous-fonctions? Si c'est la solution choisie (je n'en voit pas d'autre à vrai dire), le risque est de se retrouver avec des fonctions qui n'auront de sens que dans le code l'appelant. On perd alors le sens même d'une fonction car celles-ci ne seront probablement jamais utilisé en dehors de ce découpage. Et qu'apporte une fonction si elle n'est pas réutilisable ? Ajouté à cela le surcout dû aux passages des paramètres.Non vraiment à mon avis tant pis pour la fonction trop longue mais si elle est bien écrit le nombre de ligne importe peu.

    Pour le second point, je ne suis pas d'accord avec l'exemple choisi : pour moi il vaut mieux toujours tester la validité d'un pointeur de cette façon
    En effet, qui te dis que quelqu'un d'autre (qui a dit ?) n'a pas redéfini #define NULL=1 quelque part dans le code.
    Linux > *

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    janvier 2007
    Messages
    10 592
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 592
    Points : 17 241
    Points
    17 241
    Billets dans le blog
    2

    Par défaut

    Citation Envoyé par befalimpertinent Voir le message
    Pour le second point, je ne suis pas d'accord avec l'exemple choisi : pour moi il vaut mieux toujours tester la validité d'un pointeur de cette façon
    En effet, qui te dis que quelqu'un d'autre (qui a dit ?) n'a pas redéfini #define NULL=1 quelque part dans le code.
    2 raisons :

    1) le compilateur (bien réglé) le dira, et même sans être bien réglé risque de refuser la compil

    2) tout simplement parce que l'opérateur "!" est un opérateur logique, fonctionnant sur le RESULTAT d'une opération ou d'un test... Et que (et c'est encore plus vrai en C99) un pointeur PEUT ne pas entrer dans la catégorie des choses testables.

    Et il y a BEAUCOUP plus de chances d'être dans ce cas-là que dans le cas de la re-définition de NULL..

    Et c'est une TRES mauvaise habitude à prendre que de ne pas tester par rapport à l'erreur attendue...

    Un exemple :

    un CERTAIN nombre de fonctions de la lib C renvoie 1 pour succès, 0 pour erreur. D'AUTRES renvoient 0 pour succès, 1 pour erreur...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  20. #20
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    juin 2006
    Messages
    7 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2006
    Messages : 7 012
    Points : 9 692
    Points
    9 692

    Par défaut

    Citation Envoyé par befalimpertinent Voir le message
    Et qu'apporte une fonction si elle n'est pas réutilisable ?
    Cela ajoute de la sémantique à ton code. Donc une meilleure maintenance.


    Ajouté à cela le surcout dû aux passages des paramètres.
    Pour une fonction longue justement, on peut pas dire qu'appeler une autre fonction soit coûteux par rapport à l'ensemble de la fonction. Et si cette fonction ne sert qu'à découper ta fonction, alors on l'intégre en général dans le même fichier (par exemple en C, on va pouvoir la déclarer static voir l'inliner en C++). Cela ne sert même à rien de présupposer sur ce type d'optimisation car il est possible que la fonction soit intégrée directement à la fonction appelante (donc il n'y aura même pas de passage de paramètre).

    Il vaut toujours choisir la solution la plus maintenable. Et si ta fonction est réellement un goulot d'étranglement, alors il faudra revoir.
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. Existe-t-il des clubs de programmation
    Par KevinduC dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 20/01/2015, 04h47
  2. Réponses: 5
    Dernier message: 19/05/2008, 19h40
  3. Existe-t-il une norme de nomage des packages ?
    Par Pierre8r dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2007, 00h31
  4. Existe-t-il une norme de programmation ?
    Par dsr57 dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 15/03/2007, 11h15
  5. existe t 'il des programme pour transformer les bases
    Par creazone dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/10/2004, 15h11

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