J'ai rassemblé quelques idées pour que les codes soit plus lisibles dans un texte qui devrait plaire aux codeurs qui en ont marre de rien comprendre aux codes des autres :
I/ Variables
1. Nommage
-Les noms de variables doivent être clairs (myVar : mauvais, userName : bon)
-Les noms de variables sont en anglais, même si le programme est écrit pas un francophone (nomUtilisateur : mauvais, userName : bon). Le seul moment où vous pourrez le faire et quand vous êtes sur que votre code ne sera jamais lu par un anglophone.
-Les noms de variables commençent par une minuscule (UserName : mauvais, userName : bon)
-Si il y a différents mots :
-Chaque mot commence par une majuscule, sauf le premier mot (username : mauvais, userName : bon)
-Les mots sont collées entre eux (user_Name : mauvais, userName : bon)
2. Déclaration
-On utilise la méthode héritée du C dans tous les cas à part le cas spécial en dessous (int life(42) : mauvais, int life = 42 : bon)
-Si il s'agit d'une conversion entre différents types, on utilise la nouvelle méthode C++ (int number = string : mauvais, int number(string) : bon) (int number = "13" : mauvais, int number(13.3) : bon)
3. Constantes
-On utilise les constantes dès qu'une variable ne changera pas pendant l'éxécution (double pi = 3.14 : mauvais, double const pi = 3.14 : bon)
-On n'utilise PAS les constantes si une variable pourra changer au cours de l'éxécution (int const playersNumber = 2 : mauvais, int playersNumber = 2 : bon)
4. Contenu
-Tout devrait être en anglais (même si le programeur est francophone) ET devrait être traduisible (via gettext ou Qt Linguist, par exemple). Le seul moment où vous pourrez déroger à cette règle est quand vous êtes sur que votre code ne sera jamais lu par un anglophone.
II/ Bonnes manières diverses
1. Indentation
-Deux à quatre espaces ou une tabulation pour les indentations
-La même façon d'indenter pour tout le programme
2. Position des accolades
-Elles sont chacunes sur une ligne qui leur est propre (pas d'accolades sur une ligne déja occupée par une instruction ou une indication du type de structure de contrôle.
3. Espaces de noms
-Tout programme (à part les headers, bien sûr) devrait utiliser l'espace de nom std par défaut (ligne using namespace std).
4. Licence
-Ceci est un ensemble de règles pour choisir la meilleure licence à utiliser pour un projet.
-Les programmes de plus de 100 lignes ou qui jouent un rôle important devrait être sous la licence GNU GPL, sauf si les deux règles ci-dessous disent qu'elles devraient être sous une autre licence.
-Les bibliothèques systèmes (dont l'utilisation est nécessaire pour créer des programmes sur un certain système) devraient être sous la licence GNU LGPL.
-Les bibliothèques qui n'ont aucun avantage sur leurs concurrents ne respectant pas ces règles devraient être sous la licence GNU LGPL.
-Les programmes et bibliothèques qui ne répondent à aucun critère ci-dessus devraient être sous Apache 2.0.
5. Disponibilité
-Le code doit être rendu disponible afin de facilite la modification.
-La compilation devrait utiliser les Autotools afin de faciliter la compilation.
6. Fonctionnalités (pas trop de rapport avec une convention pour rendre le code plus facile à lire et modifier, mais je vous recommande quand même fortement de les respecter)
-Pas de fonctionnalités malveillantes,de surveillance et autres mouchards.
-Pas d'harceliciel (une version gratuite qui vous harcèle en disant d'acheter la version payante).
-Pas de pubs (vous avez beaucoup d'autres manières de financer votre logiciel que de mettre des trucs chelous).
III/ Fonctions
1. Nommage
-Les fonctions doivent obéir aux mêmes règles de nommage que les variables
2. Arguments
-Les arguments étant des variables, elles doivent obéir aux mêmes règles de nommage et de constantes que les variables "classiques"
-Si l'argument est déclaré constant, il devrait être déclaré comme une référence (à part si il n'y a aucune chance que l'argument soit grand, dans ce cas-là ne pas le faire).
IV/ Classes
1. Nommage
-Les noms de classes doivent être clairs (MyClass : mauvais, User : bon)
-Les noms de variables sont en anglais, même si le programme est écrit par un francophone (Utilisateur : mauvais, User : bon) Le seul moment où vous pourrez le faire et quand vous êtes sur que votre code ne sera jamais lu par un francophone.
-Les noms de variables commençent par une majuscule (user : mauvais, User : bon)
-Si il y a différents mots :
-Chaque mot commence par une majuscule, sauf le premier mot (Userlist : mauvais, UserList : bon)
-Les mots sont collées entre eux (User_List : mauvais, UserList : bon)
2. Attributs
-Les attributs obéissent aux mêmes règles que les variables
-Les attributs externes (qui peuvent être utile à l'utilisateur) :
-Devrait êtres protégés si il a besoin de traitement particulier via un accesseur ou un mutateur (voir les règles pour les accesseurs et les mutateurs plus bas)
-Devrait êtres publics si il n'a pas besoin de traitement particulier (un bon exemple est la classe pair de la STL)
-Les attributs internes (qui ne servent qu'au fonctionnement interne de la classe)... bah ils sont privés!
3. Accesseurs et mutateurs
-Les accesseurs pour l'attribut myAttribute devrait s'appeler myAttribute()
-Pareil pour les mutateurs (vive la surchage des fonctions!)
4. Méthodes
-Les méthodes obéissent aux mêmes règles que les fonctions
-Les méthodes externes (qui peuvent être utile à l'utilisateur) :
-Ne devraient pas renvoyer void. Si votre méthode n'a pas besoin de valeur de retour, elle devrait renvoyer une référence vers l'objet (pour faire des séries d'instruction à la jQuery, pour ceux qui connaissent)
-Les méthodes internes (qui ne servent qu'au fonctionnement interne de la classe)... bah ils sont privés!
5. Instanciation
-Les objets sont des variables comme les autres, donc elles obéissent aux mêmes règles que les autres!
V/ GUI
1. Conteneurs et contenus
-Seuls les conteneurs devraient pouvoir contenir d'autres widgets (pas de boutons dans d'autres boutons).
2. Position
-Toutes les fenêtres devraient utiliser la position relative (les layouts), hormis les boîtes de dialogues et les petites fenêtres du style des fenêtres d'utilitaires (formatage, gravage, etc.)
-Les boîtes de dialogues "classiques" (messages d'erreurs, warnings, etc.) devrait êtres modales, hormis les fenêtres utilitaires (rechercher dans le texte, rechercher/remplacer dans le texte, insérer des caractères spéciaux, etc.).
Partager