| 1 | = Coding style de Fl-Air = |
| 2 | |
| 3 | == Formatage == |
| 4 | Le formatage choisit est celui du projet LLVM. |
| 5 | Il a l'avantage d'être applicable automatiquement par l'outil clang-format. |
| 6 | 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. |
| 7 | Les sources de flair doivent être formatées par ce script avant d'être publiées. |
| 8 | |
| 9 | == Positions relatives des const, & et * == |
| 10 | La lecture se fait de droite à gauche par rapport à l'étoile (ou l'esperluette). |
| 11 | Au sein de chacun des blocs situé à gauche et à droite, le choix suivant est décidé |
| 12 | {{{#!cpp |
| 13 | int *plop; // pointeur sur entier |
| 14 | int *const plop; // pointeur constant sur entier |
| 15 | const int *plop; // pointeur sur un entier constant |
| 16 | const int *const plop; // pointeur constant sur un entier constant |
| 17 | }}} |
| 18 | |
| 19 | L'étoile ou l'esperluette est collée au nom de la variable ou de la méthode |
| 20 | {{{#!cpp |
| 21 | int &toto; |
| 22 | int &Toto(); |
| 23 | }}} |
| 24 | |
| 25 | == Nommage des attributs, des méthodes et des classes == |
| 26 | Les noms d'attributs commencent par une minuscule. |
| 27 | Les noms de méthodes et de classes commencent par une majuscule. |
| 28 | Les noms longs, composés de plusieurs noms concaténés, sont en camelCase. |
| 29 | |
| 30 | Les abréviations sont évitées dans les noms. |
| 31 | |
| 32 | Exemple: monBeauEtSympathiqueAttribut est préféré à monBeauSympaAttr (c'est le boulot de l'IDE de faire la complétion et le reformatage) |
| 33 | |
| 34 | 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. |
| 35 | |
| 36 | Exemple d'un constructeur |
| 37 | {{{#!cpp |
| 38 | void Toto(int attribut);//declaration |
| 39 | void Toto(int inAttribut):attribut(inAttribut) {//implementation |
| 40 | } |
| 41 | }}} |
| 42 | |
| 43 | == Pas de référence sur des types simples == |
| 44 | |
| 45 | Ecrire |
| 46 | {{{#!cpp |
| 47 | float ComputeCustomThrust(void); |
| 48 | }}} |
| 49 | plutôt que |
| 50 | {{{#!cpp |
| 51 | void ComputeCustomThrust(float &torques); |
| 52 | }}} |
| 53 | |
| 54 | == Paramètres en entrée ou en sortie == |
| 55 | {{{#!cpp |
| 56 | Toto(const Plop *plop) // pointeur sur un Plop constant, donc paramètre en entrée |
| 57 | Toto(Plop *plop) // pointeur sur un Plop, donc paramètre en sortie |
| 58 | }}} |
| 59 | |
| 60 | == |
| 61 | |
| 62 | == Geteurs et Seteurs == |
| 63 | |
| 64 | === Set === |
| 65 | |
| 66 | {{{#!cpp |
| 67 | void SetQuaternion(const Quaternion &inQuaternion); |
| 68 | }}} |
| 69 | |
| 70 | === Get === |
| 71 | |
| 72 | 1 seul des 2 get suivants: |
| 73 | {{{#!cpp |
| 74 | const Quaternion &GetQuaternion(void) const;//si pas mutex, retour reference const pour ne pas servir en setQuaternion |
| 75 | Quaternion GetQuaternion(void) const;//si mutex |
| 76 | }}} |
| 77 | |
| 78 | cas particulier, retour de plusieurs valeurs de façon consistante (1 mutex pour récupérer les 2 types): |
| 79 | {{{#!cpp |
| 80 | void GetQuaternionAndAngularRate(Quaternion &outQuaternion,Vector3D &outAngularRate) const; |
| 81 | }}} |
| 82 | |
| 83 | == Conversions == |
| 84 | |
| 85 | Définir les 2 suivants: |
| 86 | {{{#!cpp |
| 87 | void ToEuler(Euler &euler) const; |
| 88 | Euler ToEuler(void) const; |
| 89 | }}} |
| 90 | |
| 91 | __NB__: l'implémentation du second est simple: |
| 92 | {{{#!cpp |
| 93 | Euler ToEuler(void) const { |
| 94 | Euler euler; |
| 95 | ToEuler(euler); |
| 96 | return euler; |
| 97 | } |
| 98 | }}} |