= 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é {{{#!cpp 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 {{{#!cpp 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 {{{#!cpp void Toto(int attribut);//declaration void Toto(int inAttribut):attribut(inAttribut) {//implementation } }}} == Pas de référence sur des types simples == Ecrire {{{#!cpp float ComputeCustomThrust(void); }}} plutôt que {{{#!cpp void ComputeCustomThrust(float &torques); }}} == Paramètres en entrée ou en sortie == {{{#!cpp 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 === {{{#!cpp void SetQuaternion(const Quaternion &inQuaternion); }}} === Get === 1 seul des 2 get suivants: {{{#!cpp 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): {{{#!cpp void GetQuaternionAndAngularRate(Quaternion &outQuaternion,Vector3D &outAngularRate) const; }}} == Conversions == Définir les 2 suivants: {{{#!cpp void ToEuler(Euler &euler) const; Euler ToEuler(void) const; }}} __NB__: l'implémentation du second est simple: {{{#!cpp Euler ToEuler(void) const { Euler euler; ToEuler(euler); return euler; } }}}