# 🧭 Norme de DĂ©veloppement *Version 2.0 – Pour IA et nouveaux collaborateurs* --- ## 🧠 Philosophie de dĂ©veloppement Le but de cette norme est de garantir un code **clair, cohĂ©rent et maintenable**, que ce soit par un dĂ©veloppeur humain ou une IA d’assistance. Chaque ligne doit ĂȘtre **comprĂ©hensible au premier regard**, chaque fonction doit **faire une seule chose**, et la structure du projet doit **rester intuitive** sans dĂ©pendre de frameworks lourds ou de bibliothĂšques inutiles. --- ## đŸ§© Structure gĂ©nĂ©rale * Le code doit rester **simple, explicite et lisible**. * On privilĂ©gie la **cohĂ©rence** Ă  la crĂ©ativitĂ© syntaxique. * Le code doit ĂȘtre **autoportant** : bien nommĂ© plutĂŽt que sur-commentĂ©. * Le style doit ĂȘtre uniforme entre tous les fichiers. --- ## 🐍 Nommage ### Variables * Toujours en **snake_case** : `ma_variable`, `list_users`, `is_valid`. * Pas de chiffres dans les noms. * Le nom doit **reflĂ©ter le rĂŽle et le type** de la donnĂ©e. * PrĂ©fixes recommandĂ©s : * `nb_` → quantitĂ© (ex: `nb_utilisateurs`) * `is_` / `has_` → boolĂ©en (ex: `is_active`, `has_error`) * `list_` → tableau ou collection * `str_` → chaĂźne de caractĂšres * `obj_` → objet ou structure complexe ✅ **Correct :** ```js let nb_chats = 5; let list_chats = []; let is_chat = true; ``` ❌ **Incorrect :** ```js let 1chien = 1; let mechantChien = {}; let IS_CHIEN = false; let nb_chien = new Chien(); ``` --- ### Classes / Structures * Une majuscule au dĂ©but (`User`, `Project`). * Un seul mot. * Si plusieurs concepts sont nĂ©cessaires, utiliser une **composition**, pas un nom long. ✅ **Correct :** ```js class User {} class Project {} ``` ❌ **Incorrect :** ```js class user {} class ProjectNuageDePoints {} ``` --- ## đŸ§± Structure du code ### DĂ©claration des variables Toutes les variables doivent ĂȘtre **dĂ©clarĂ©es en dĂ©but de fonction**, avant toute action logique. ✅ **Correct :** ```js function main() { let compteur = 0; let message = "Hello"; console.log(message); } ``` ❌ **Incorrect :** ```js function main() { console.log("test"); let compteur = 0; } ``` --- ### Typage implicite et explicite * Si le type est Ă©vident, inutile de le prĂ©ciser. * Sinon, indiquer le type clairement. ✅ **Correct :** ```js let str_nom = "Jean"; let list_ids = []; ``` ❌ **Incorrect :** ```js let x; ``` --- ### Placement des crochets Le premier `{` doit toujours ĂȘtre **sur la mĂȘme ligne** que l’instruction. --- ## ⚙ Promesses et gestion asynchrone (JavaScript) ### Interdiction de `async/await` * `async` / `await` sont **strictement interdits**. * Toujours utiliser des chaĂźnes `.then()` / `.catch()`. ✅ **Correct :** ```js action_async() .then((data) => { return sous_action_async(data); }) .then((result) => { utiliser_resultat(result); }) .catch((err) => { afficher_message_utilisateur("Une erreur est survenue."); console.error(err); }); ``` ❌ **Incorrect :** ```js async function main() {} ``` --- ## 🧠 Bonnes pratiques gĂ©nĂ©rales * Une **fonction = une responsabilitĂ© unique**. * Extraire toute logique rĂ©pĂ©tĂ©e dans une fonction utilitaire. * Les noms de fonctions doivent dĂ©crire prĂ©cisĂ©ment leur action. * Pas de code commentĂ© laissĂ© dans le projet. * Les fonctions doivent tenir **dans la hauteur visible d’un Ă©cran**. --- ## đŸ§© Style de code * **Indentation :** 4 espaces. * **Point-virgule :** obligatoire. * **Fonctions flĂ©chĂ©es** toujours prĂ©fĂ©rĂ©es. * **Constantes globales** en MAJUSCULES. --- ## đŸ§© Organisation des fichiers * Fichiers JS en **PascalCase**. * Fichiers Python en **snake_case**. * Pas de framework structurant lourd. * HTML / CSS / JS natif privilĂ©giĂ©. --- ## 🐍 RĂšgles spĂ©cifiques Python * **Type hints** obligatoires sur toutes les signatures de fonctions. * **Docstrings** en français sur toutes les fonctions publiques. * Imports regroupĂ©s en haut du fichier, dans l'ordre : 1. BibliothĂšque standard 2. BibliothĂšques tierces 3. Modules du projet * Gestion d'erreurs : tout `try/except` doit loguer l'erreur ET la remonter. * Pas de `print()` en production, utiliser le module `logging`. * Les constantes globales sont en **MAJUSCULES**. * Les variables suivent les mĂȘmes rĂšgles de prĂ©fixage que JavaScript (`nb_`, `is_`, `has_`, `list_`, `str_`, `obj_`). ✅ **Correct :** ```python nb_chats = 5 list_chats = [] is_chat = True str_nom = "Jean" ``` ❌ **Incorrect :** ```python chats = 5 mechantChien = {} IS_CHIEN = False nb_chien = Chien() ``` --- ## 💬 Commentaires et documentation * Commentaires rares et utiles uniquement. * Pas de JSDoc obligatoire. * Commentaires en anglais simple si nĂ©cessaires. --- ## đŸ§± Gestion des erreurs * Toujours afficher une **erreur utilisateur visible**. * Les erreurs techniques doivent ĂȘtre **loguĂ©es**. * Aucune erreur ne doit ĂȘtre ignorĂ©e silencieusement. --- ## đŸ§© Git et gestion de versions * Un commit = une fonctionnalitĂ© complĂšte. * Aucun commit cassĂ© ou incomplet. --- ## ⚙ Outils et dĂ©pendances * DĂ©pendances externes **fortement limitĂ©es**. * Aucun framework JS lourd. * Backend en **Python** avec **Flask** (lĂ©ger, sans ORM). * **Exceptions autorisĂ©es pour le frontend** : * **Bootstrap 5** (CSS + JS) via CDN pour la mise en page et les composants UI. * **Material Design Icons (MDI)** via CDN pour les icĂŽnes. --- ## đŸ€– RĂšgles spĂ©cifiques pour l’assistant IA L’IA d’assistance au dĂ©veloppement doit : 1. **Ne jamais utiliser `async/await`.** Toujours prĂ©fĂ©rer `.then()` / `.catch()` avec retour de promesse. 2. **Ne jamais utiliser `forEach()`.** * L’itĂ©ration sur des tableaux ou collections doit obligatoirement utiliser des boucles `for...of`. * Cette rĂšgle garantit : * un meilleur contrĂŽle du flux (`break`, `continue`, `return`), * une lisibilitĂ© accrue, * une cohĂ©rence avec les rĂšgles de dĂ©bogage et de responsabilitĂ©. ✅ **Correct :** ```js for (let user of list_users) { traiter_utilisateur(user); } ``` ❌ **Incorrect :** ```js list_users.forEach((user) => { traiter_utilisateur(user); }); ``` 3. **Reformater automatiquement** le code selon cette norme. 4. **VĂ©rifier la lisibilitĂ© et la cohĂ©rence** avant toute proposition. 5. **Proposer des refactorings** en cas de duplication. 6. **CrĂ©er des fonctions utilitaires** si une logique se rĂ©pĂšte. 7. **Respecter strictement le nommage** (`snake_case`, `PascalCase`). 8. **Toujours gĂ©rer les erreurs** avec un `.catch()` visible utilisateur. 9. **Ne pas utiliser de dĂ©pendances externes** sans valeur fonctionnelle claire. 10. **En Python, toujours utiliser des type hints** sur les paramĂštres et retours de fonctions. 11. **En Python, toujours inclure une docstring** sur les fonctions publiques. 12. **Ne jamais utiliser `print()` pour le logging** ; utiliser le module `logging`. 13. **Appliquer les mĂȘmes prĂ©fixes de variables** en Python qu'en JavaScript. --- ## 📘 Conclusion Ce document est une **rĂ©fĂ©rence de cohĂ©rence globale** pour le projet. Il s’applique **aux humains comme Ă  l’IA**. Le code doit rester : * **Lisible** * **PrĂ©visible** * **Maintenable** * **Humain**