camelCase, snake_case, kebab-case : aide-mémoire des conventions de nommage par langage

Voici la version courte. Les types et les classes s'écrivent en PascalCase dans presque tous les langages. Les variables et les fonctions s'écrivent en camelCase en JavaScript, Java, C#, Kotlin et Swift, mais en snake_case en Python, Ruby et Rust. Les constantes s'écrivent en SCREAMING_SNAKE_CASE dans la plupart des langages, avec pour exceptions Go, Swift, C# et le C++ au style Google. Tout ce qui se retrouve dans une URL, un fichier CSS ou un nom de paquet est généralement en kebab-case minuscule, et les variables d'environnement sont en majuscules avec des tirets bas.
Voilà le schéma général. C'est sur les détails qu'on se dispute en revue de code : cet aide-mémoire s'en tient donc à ce que dit réellement le guide de style officiel, ou le plus répandu, de chaque langage, et cite la source pour chacun.
camelCase, snake_case, kebab-case : les cinq styles et leurs autres noms
- camelCase (
orderTotal) : premier mot en minuscules, chaque mot suivant avec une majuscule initiale. On parle aussi de lowerCamelCase ; PEP 8 l'appelle mixedCase. - PascalCase (
OrderTotal) : chaque mot avec une majuscule initiale. On parle aussi d'UpperCamelCase, de CapWords (PEP 8) ou de StudlyCaps (PSR-1 de PHP). - snake_case (
order_total) : mots en minuscules reliés par des tirets bas. - SCREAMING_SNAKE_CASE (
ORDER_TOTAL) : mots en majuscules reliés par des tirets bas. Le guide JavaScript de Google l'appelle CONSTANT_CASE, et son guide Java UPPER_SNAKE_CASE. - kebab-case (
order-total) : mots en minuscules reliés par des traits d'union. La plupart des langages ne peuvent pas l'employer pour des identifiants, car le trait d'union est un signe moins.
Pour passer un nom d'un style à l'autre, collez-le dans notre convertisseur de casse. Il découpe aux espaces, aux tirets bas, aux traits d'union et aux majuscules existantes : order_total, order-total et OrderTotal se convertissent donc proprement les uns en les autres. Traitez toutefois un seul nom à la fois : il considère tout ce que contient la zone comme un identifiant unique.
Aide-mémoire : conventions de nommage par langage
| Langage | Variables et fonctions | Classes et types | Constantes | Source |
|---|---|---|---|---|
| JavaScript, TypeScript | camelCase | PascalCase | CONSTANT_CASE pour les valeurs de niveau module qui ne changent jamais | Guides de style Google pour JavaScript et TypeScript |
| Java | camelCase | PascalCase | UPPER_SNAKE_CASE pour les champs static final profondément immuables | Google Java Style Guide |
| Kotlin | camelCase | PascalCase | SCREAMING_SNAKE_CASE pour const et les valeurs profondément immuables de premier niveau ou d'objet | Kotlin coding conventions |
| C# | camelCase pour les variables locales et les paramètres, _camelCase pour les champs privés, PascalCase pour les méthodes et les membres publics | PascalCase, avec le préfixe I pour les interfaces (IWorkerQueue) | PascalCase | Documentation .NET de Microsoft |
| Swift | camelCase | PascalCase | camelCase | Swift API Design Guidelines |
| Go | camelCase si non exporté, PascalCase si exporté | Même règle | Aussi MixedCaps (MaxPacketSize) | Effective Go, Google Go Style |
| Python | snake_case | PascalCase (CapWords) | UPPER_SNAKE_CASE | PEP 8 |
| Ruby | snake_case | PascalCase | SCREAMING_SNAKE_CASE | Ruby Style Guide |
| Rust | snake_case | PascalCase (UpperCamelCase) | SCREAMING_SNAKE_CASE | Rust API Guidelines (RFC 430) |
| PHP | méthodes en camelCase ; les propriétés sont laissées à votre choix | PascalCase (StudlyCaps) | constantes de classe en UPPER_SNAKE_CASE | PSR-1 |
| C++ | variables en snake_case, fonctions en PascalCase | PascalCase | kDaysInAWeek | Google C++ Style Guide (un parmi plusieurs) |
Quelques lignes appellent une note. En Go, la première lettre n'est pas du tout un choix de style : c'est la règle de visibilité. Area est exporté depuis son paquet, area ne l'est pas, et le compilateur l'impose. C++ n'a pas de convention valable pour tout le langage ; la bibliothèque standard elle-même emploie snake_case (std::unordered_map, push_back). Voyez donc la ligne Google comme une option bien documentée, pas comme la règle.
Rust est particulièrement strict sur le style. Le compilateur vous avertit d'office : écrivez fn GetUser() ou struct user_account, et rustc suggère get_user et UserAccount avant même que vous ayez lancé un linter.
Noms de fichiers, de modules et de paquets
- Java : une classe publique de premier niveau doit se trouver dans un fichier qui porte exactement son nom, majuscules comprises.
OrderServiceva dansOrderService.java, et javac refuse tout autre nom. - Kotlin : un fichier qui contient une seule classe porte le nom de cette classe. Les autres fichiers reçoivent un nom descriptif en UpperCamelCase, comme
ProcessDeclarations.kt. - Python : les modules reçoivent des noms courts, entièrement en minuscules, avec des tirets bas s'ils améliorent la lisibilité. Les paquets doivent eux aussi être courts et en minuscules, et PEP 8 y déconseille les tirets bas.
- Ruby : des fichiers en snake_case, nommés d'après la classe qu'ils contiennent :
HelloWorldse trouve donc danshello_world.rb. - Go : les noms de paquets sont des mots uniques en minuscules, sans tirets bas ni mixedCaps :
base64, et nonencoding_base64ouencodingBase64. - JavaScript et TypeScript : pas de règle unique. Le guide JavaScript de Google veut des noms de fichiers tout en minuscules, avec des tirets bas ou des traits d'union, et son guide TypeScript emploie snake_case. Le guide d'Airbnb dit qu'un nom de fichier doit correspondre à son export par défaut : une classe
CheckBoxse trouve donc dansCheckBox.js. Choisissez une règle par projet et écrivez-la noir sur blanc. - Paquets npm : les noms des nouveaux paquets ne peuvent pas du tout contenir de majuscules.
Au-delà du code source : variables d'environnement, CSS, HTML, URL, JSON et SQL
| Où | Convention | Exemple | Pourquoi |
|---|---|---|---|
| Variables d'environnement | SCREAMING_SNAKE_CASE | DATABASE_URL | S'accorde avec les variables système comme PATH et HOME. Les noms sont sensibles à la casse sous Linux et macOS, pas sous Windows. |
| Propriétés CSS | kebab-case | background-color | Imposé par le langage. |
| Propriétés personnalisées CSS | kebab-case après deux tirets | --brand-color | Sensibles à la casse : --Brand-Color serait donc une autre propriété. |
| Noms de classes CSS | kebab-case, souvent avec BEM | card__title--large | Se lit comme les propriétés qui l'entourent. |
| CSS depuis JavaScript | camelCase | el.style.backgroundColor | L'objet style expose les noms de propriétés en camelCase. |
| Attributs data HTML | kebab-case | data-index-number | Lus en JavaScript sous la forme dataset.indexNumber. |
| Chemins d'URL | kebab-case en minuscules | /blog/developer-case-styles | Google recommande les traits d'union plutôt que les tirets bas et traite /APPLE et /apple comme deux URL différentes. |
| Clés JSON | Pas de standard | userId ou user_id | Alignez-vous sur le principal consommateur et convertissez à la frontière. |
| Tables et colonnes SQL | snake_case en minuscules | order_items | Fonctionne sans guillemets dans toutes les grandes bases de données. |
Une particularité des variables d'environnement : selon POSIX, les utilitaires standard emploient des noms en majuscules, et les noms qui contiennent des minuscules sont réservés aux applications, de sorte qu'un nom en minuscules ne peut jamais entrer en conflit avec un nom standard. Les majuscules restent pourtant l'usage établi ; nous les garderions donc, en ajoutant plutôt un préfixe distinctif (MYAPP_TIMEOUT) pour éviter les conflits.
Les lignes sur CSS et SQL ont chacune leur propre article : voyez le nommage CSS et BEM pour les noms de classes, et les conventions de nommage SQL pour comprendre pourquoi les bases de données vous poussent vers les minuscules.
Sigles : là où les guides de style divergent
Tous les guides s'accordent sur userName. Ils se divisent sur userID. Les guides JavaScript et Java de Google mettent les sigles en minuscules comme des mots ordinaires (xmlHttpRequest, customerId). Go garde chaque sigle entièrement dans une seule casse (ServeHTTP, appID). Les directives .NET de Microsoft mettent en majuscules les deux lettres d'un sigle de deux lettres (IOStream), mais seulement la première lettre des sigles plus longs (HtmlTag). Rust les traite comme des mots (Uuid), et PEP 8 préfère HTTPServerError à HttpServerError. Nous comparons les options côte à côte dans camelCase ou PascalCase.
Comment choisir quand on hésite
- Vérifiez si la plateforme décide pour vous. Les noms de propriétés CSS, les noms de fichiers Java, les noms exportés de Go et les noms de composants React (qui doivent commencer par une majuscule) ne relèvent pas du choix de style.
- Suivez le guide officiel du langage. Le nouveau code doit ressembler à la bibliothèque standard qu'il côtoie.
- Alignez-vous sur le projet existant. PEP 8 le dit sans détour : la cohérence au sein d'un projet compte plus que la cohérence avec le guide de style.
- Laissez un linter s'en souvenir. La règle
camelcased'ESLint, les règlesNde Ruff pour Python et les avertissements intégrés de rustc rattrapent les écarts avant qu'un relecteur n'ait à le faire. - Convertissez une fois, à la frontière. Quand du JSON en snake_case rencontre du JavaScript en camelCase, renommez les clés dans une seule couche de sérialisation au lieu de laisser les deux styles se répandre dans toute la base de code.


