Coding style de Fl-Air
Formatage
Le formatage choisit est celui du projet LLVM. Il a l'avantage d'être applicable automatiquement par l'outil clang-format. Le framework flair contient le script flair_format_dir qui applique automatiquement le style LLVM à tous les fichiers h et cpp d'un répertoire. Les sources de flair doivent être formatées par ce script avant d'être publiées.
Positions relatives des const, & et *
La lecture se fait de droite à gauche par rapport à l'étoile (ou l'esperluette). Au sein de chacun des blocs situé à gauche et à droite, le choix suivant est décidé
int *plop; // pointeur sur entier int *const plop; // pointeur constant sur entier const int *plop; // pointeur sur un entier constant const int *const plop; // pointeur constant sur un entier constant
L'étoile ou l'esperluette est collée au nom de la variable ou de la méthode
int &toto; int &Toto();
Nommage des attributs, des méthodes et des classes
Les noms d'attributs commencent par une minuscule. Les noms de méthodes et de classes commencent par une majuscule. Les noms longs, composés de plusieurs noms concaténés, sont en camelCase.
Les abréviations sont évitées dans les noms.
Exemple: monBeauEtSympathiqueAttribut est préféré à monBeauSympaAttr (c'est le boulot de l'IDE de faire la complétion et le reformatage)
Quand il y a conflit entre le nom d'un paramètre et le nom d'un attribut (constructeur, setteur...), on préfixe le nom du paramètre par in ou out ou inOut. Ceci uniquement pour l'implémentation de la méthode.
Exemple d'un constructeur
void Toto(int attribut);//declaration void Toto(int inAttribut):attribut(inAttribut) {//implementation }
Pas de référence sur des types simples
Ecrire
float ComputeCustomThrust(void);
plutôt que
void ComputeCustomThrust(float &torques);
Paramètres en entrée ou en sortie
Toto(const Plop *plop) // pointeur sur un Plop constant, donc paramètre en entrée Toto(Plop *plop) // pointeur sur un Plop, donc paramètre en sortie
Geteurs et Seteurs
Set
void SetQuaternion(const Quaternion &inQuaternion);
Get
1 seul des 2 get suivants:
const Quaternion &GetQuaternion(void) const;//si pas mutex, retour reference const pour ne pas servir en setQuaternion Quaternion GetQuaternion(void) const;//si mutex
cas particulier, retour de plusieurs valeurs de façon consistante (1 mutex pour récupérer les 2 types):
void GetQuaternionAndAngularRate(Quaternion &outQuaternion,Vector3D &outAngularRate) const;
Conversions
Définir les 2 suivants:
void ToEuler(Euler &euler) const; Euler ToEuler(void) const;
NB: l'implémentation du second est simple:
Euler ToEuler(void) const { Euler euler; ToEuler(euler); return euler; }