Projet

Général

Profil

Harmonisations dans nos codes

J'ai trouvé ça :
http://geosoft.no/development/cppstyle.html

Quelques commentaires sur ces prescriptions (ce n'est pas parce que je dis dessous que je suis d'accord que j'ai pensé à le faire partout ;-) ).
Mon anglais sera parfait à partir de janvier 2012, mais ce n'est pas encore le cas : n'hésitez pas à me faire remarquer une erreur de traduction...

Je trouve bien et je vous propose de faire comme ça :

3. Les noms de types et de classes doivent utiliser UpperCamelCase

class MaNouvelleClasse

4. Les noms de variables doivent utiliser lowerCamelCase
int valeurNouvelle;

5. Les noms de constantes (y compris les énumérations) doivent être entièrement en majuscules, des underscores séparant les mots.
const int NOMBRE_ESSAIS=10;

6. Les noms de méthodes et de fonctions doivent être des verbes écrits en lowerCamelCase
void afficheResultat();

17. Les préfixes « get » et « set » doivent être utiliser pour accéder directement aux attributs (on appelle ces méthodes « accesseurs »)
int getMScore();

25. Les variables de boucles doivent être appelées « i », « j », « k », etc...
49. Les attributs de classe ne doivent jamais être déclarés en « public »
57. Les boucles « do...while » devraient être évitées (M.Ruby, mon prof de C++ à l'I.U.T., avait cette boucle en horreur absolue, argumentant que la plupart du temps on se trompe d'une fois dans le nombre d'itérations)
73. Les déclarations de classes doivent respecter cette forme :

class SomeClass : public BaseClass 
{
public:
… 
protected:
… 
private:
…
public slots:
…
protected slots:
…
private slots:
…
signals:
…
}

75. Les structures « if-else » doivent respecter cette forme :

if (condition) { 
    instructions; 
}
else    if (condition) { 
              instructions;
        } 
        else {
              instructions; 
        }

Rmq 1 : mêmes alignements si instruction unique, sans accolade
if (condition)
    instruction; 
else 
    instruction


Rmq 2 : structure similaire pour les boucles « for », « while »

80. Les structures « switch » doivent respecter cette forme :

switch (condition) { 
    case 1 : 
        instructions;
        break;
    case 2 : 
        instructions; 
        break; 
    default :
        instructions; 
        break; 
}

Je ne suis pas d'accord et je vous propose de faire autrement :

11. Les attributs privés de classes devraient être suffixées par un underscore (Je préfère préfixer par "m_")

int m_score; PLUTOT QUE int score_;

12&29. Les variables génériques (objets ou pointeurs) devraient porter le nom de leur type (Je trouve que c'est source de confusion quand on lit le code).
51. Les « * » et « & » qui caractérisent les pointeurs et référence en C++ doivent être collés au type plutôt qu'au nom
On décide ici de coller l'étoile ou l'esperluette au nom de la variable
QString *monNom; ET PAS QString* monNom;

71. L'indentation de base devrait être 2 (Moi je mets une tabulation. D'ailleurs c'est ce que fait l'indentation automatique de QtCreator (Ctrl + i) )
83. Les types de retour d'une fonction peuvent être alignés à gauche immédiatement au dessus du nom de la fonction (J'aime mieux sur la même ligne, pour rester cohérent avec le prototype du .h)
91. Les commentaires devraient toujours être rédigés en anglais (Restons français que diable !!)

Je ne faisais pas mais j'aime bien l'idée, et j'essaierai d'y penser :

26. Les méthodes dont le retour est un booléen ou les variables booléennes devraient être préfixés par « is »

bool isBonneIdee=true;

Dans certains cas, on peut aussi préférer :
  bool hasLicense();
  bool canEvaluate();
  bool shouldSort();

28. Eviter les abréviations dans les noms (d'autant que l'autocomplétion fait qu'on se moque que les noms soient longs...)
int nombreBallonsPasses; PLUTOT QUE int nbBallPas;

66. Les valeurs entières passées aux variables déclarées comme décimales ou réelles doivent être écrites de façon décimale
float valeur=1.0; PLUTOT QUE float valeur=1;

70. "0" devrait être utilisé à la place de "NULL".

Réflexions supplémentaires

Les noms des objets et fonctions seront choisis en langue anglaise.

Dans l'application, on peut préfixer les objets en séparant l'abréviation de classe du nom choisi par un _

QListWidget lw_monListWidget;

Préfixe pour les objets usuels

Objet Qt Préfixe Exemple
PushButton btn btnBonjour
CheckBox cb cbLangue
RadioButton rb rbChoixA
lineEdit le leLogin
textEdit te teDescription
label lbl lblLogin
webView web webForum
graphicsView gv gvPrincipale
treeWidget tw twListeDetaillee
groupBox gb gbParametres

Autres objets moins souvent utilisés:

Objet Qt Préfixe Exemple
listView lv ? lvFichiers
treeView tv ? tvArborescence
tableView tv ? tvTableau
listWidget lw
tableWidget
scrollArea
tabWidget
comboBox cb
fontComboBox
plainTextEdit
spinBox sb
horizontalScrollBar
horizontalSlider
verticalScrollBar
verticalSlider
textBrowser tb tbDescription
Redmine Appliance - Powered by TurnKey Linux