← Blog · · ConvertCaseHQ-team · 6 min lezen

camelCase, snake_case, kebab-case: naamgevingsconventies per taal (spiekbriefje)

Dit is de korte versie. Types en klassen krijgen in vrijwel elke taal PascalCase. Variabelen en functies krijgen camelCase in JavaScript, Java, C#, Kotlin en Swift, maar snake_case in Python, Ruby en Rust. Constanten krijgen in de meeste talen SCREAMING_SNAKE_CASE, met Go, Swift, C# en C++ in Google-stijl als uitzonderingen. Alles wat in een URL, een CSS-bestand of een pakketnaam terechtkomt, is meestal kebab-case in kleine letters, en omgevingsvariabelen staan in hoofdletters met underscores.

Dat is het patroon. Over de details wordt in code reviews gediscussieerd, dus dit spiekbriefje houdt zich aan wat de officiële of meest gebruikte stijlgids van elke taal echt zegt, en noemt voor elke taal de bron.

camelCase, snake_case, kebab-case: de vijf stijlen en hun andere namen

  • camelCase (orderTotal): eerste woord in kleine letters, elk volgend woord met een hoofdletter. Ook lowerCamelCase genoemd; PEP 8 noemt het mixedCase.
  • PascalCase (OrderTotal): elk woord met een hoofdletter. Ook UpperCamelCase, CapWords (PEP 8) of StudlyCaps (PSR-1 van PHP).
  • snake_case (order_total): woorden in kleine letters, verbonden met underscores.
  • SCREAMING_SNAKE_CASE (ORDER_TOTAL): woorden in hoofdletters, verbonden met underscores. De JavaScript-gids van Google noemt het CONSTANT_CASE en zijn Java-gids UPPER_SNAKE_CASE.
  • kebab-case (order-total): woorden in kleine letters, verbonden met koppeltekens. In de meeste talen kun je het niet voor identifiers gebruiken, omdat het koppelteken een minteken is.

Om een naam van de ene stijl naar de andere om te zetten, plak je hem in onze hoofdletter-converter. Die splitst op spaties, underscores, koppeltekens en bestaande hoofdletters, dus order_total, order-total en OrderTotal zijn probleemloos in elkaar om te zetten. Doe wel één naam tegelijk: alles in het veld wordt als één identifier behandeld.

Spiekbriefje: naamgevingsconventies per taal

TaalVariabelen en functiesKlassen en typesConstantenBron
JavaScript, TypeScriptcamelCasePascalCaseCONSTANT_CASE voor waarden op moduleniveau die nooit veranderenStijlgidsen van Google voor JavaScript en TypeScript
JavacamelCasePascalCaseUPPER_SNAKE_CASE voor volledig onveranderlijke (deeply immutable) static final-veldenGoogle Java Style Guide
KotlincamelCasePascalCaseSCREAMING_SNAKE_CASE voor const en volledig onveranderlijke waarden op topniveau of in objectenKotlin coding conventions
C#camelCase voor lokale variabelen en parameters, _camelCase voor privévelden, PascalCase voor methoden en publieke ledenPascalCase, met het voorvoegsel I voor interfaces (IWorkerQueue)PascalCase.NET-documentatie van Microsoft
SwiftcamelCasePascalCasecamelCaseSwift API Design Guidelines
GocamelCase als de naam niet wordt geëxporteerd, PascalCase als hij wel wordt geëxporteerdDezelfde regelOok MixedCaps (MaxPacketSize)Effective Go, Google Go Style
Pythonsnake_casePascalCase (CapWords)UPPER_SNAKE_CASEPEP 8
Rubysnake_casePascalCaseSCREAMING_SNAKE_CASERuby Style Guide
Rustsnake_casePascalCase (UpperCamelCase)SCREAMING_SNAKE_CASERust API Guidelines (RFC 430)
PHPcamelCase voor methoden; eigenschappen laat je zelf bepalenPascalCase (StudlyCaps)UPPER_SNAKE_CASE voor klasseconstantenPSR-1
C++snake_case voor variabelen, PascalCase voor functiesPascalCasekDaysInAWeekGoogle C++ Style Guide (een van meerdere)

Een paar rijen vragen om een voetnoot. In Go is de eerste letter helemaal geen stijlkeuze: het is de zichtbaarheidsregel. Area wordt uit zijn pakket geëxporteerd en area niet, en de compiler dwingt dat af. C++ kent geen conventie voor de hele taal; de standaardbibliotheek zelf gebruikt snake_case (std::unordered_map, push_back), dus zie de rij van Google als één goed gedocumenteerde optie en niet als de regel.

Rust is ongewoon streng over stijl. De compiler waarschuwt standaard al: schrijf je fn GetUser() of struct user_account, dan stelt rustc get_user en UserAccount voor voordat je een linter hebt gedraaid.

Namen van bestanden, modules en pakketten

  • Java: een publieke klasse op het hoogste niveau moet in een bestand staan dat precies haar naam draagt, hoofdletters inbegrepen. OrderService hoort in OrderService.java, en javac weigert alles wat daarvan afwijkt.
  • Kotlin: een bestand met één klasse draagt de naam van die klasse. Andere bestanden krijgen een beschrijvende naam in UpperCamelCase, zoals ProcessDeclarations.kt.
  • Python: modules krijgen korte namen in alleen kleine letters, met underscores als die de leesbaarheid helpen. Pakketten moeten ook kort zijn en uit kleine letters bestaan, en PEP 8 raadt underscores daarin af.
  • Ruby: bestanden in snake_case, genoemd naar de klasse erin, dus HelloWorld staat in hello_world.rb.
  • Go: pakketnamen zijn losse woorden in kleine letters, zonder underscores of mixedCaps: base64, niet encoding_base64 of encodingBase64.
  • JavaScript en TypeScript: geen eenduidige regel. De JavaScript-gids van Google wil bestandsnamen in alleen kleine letters met underscores of streepjes, en zijn TypeScript-gids gebruikt snake_case. Volgens de gids van Airbnb moet een bestandsnaam overeenkomen met de default export, dus een klasse CheckBox staat in CheckBox.js. Kies er per project één en schrijf die op.
  • npm-pakketten: nieuwe pakketnamen mogen helemaal geen hoofdletters bevatten.

Buiten de broncode: omgevingsvariabelen, CSS, HTML, URL's, JSON en SQL

WaarConventieVoorbeeldWaarom
OmgevingsvariabelenSCREAMING_SNAKE_CASEDATABASE_URLPast bij systeemvariabelen zoals PATH en HOME. Namen zijn hoofdlettergevoelig op Linux en macOS, op Windows niet.
CSS-eigenschappenkebab-casebackground-colorVastgelegd door de taal.
Custom properties in CSSkebab-case na twee streepjes--brand-colorHoofdlettergevoelig, dus --Brand-Color zou een andere eigenschap zijn.
CSS-klassenamenkebab-case, vaak met BEMcard__title--largeLeest als de eigenschappen eromheen.
CSS vanuit JavaScriptcamelCaseel.style.backgroundColorHet style-object biedt de eigenschapsnamen aan in camelCase.
HTML-data-attributenkebab-casedata-index-numberIn JavaScript uitgelezen als dataset.indexNumber.
URL-padenkebab-case in kleine letters/blog/developer-case-stylesGoogle raadt koppeltekens aan boven underscores en behandelt /APPLE en /apple als verschillende URL's.
JSON-sleutelsGeen standaarduserId of user_idVolg de belangrijkste afnemer en zet om aan de grens.
SQL-tabellen en -kolommensnake_case in kleine lettersorder_itemsWerkt zonder aanhalingstekens in elke grote database.

Een eigenaardigheid bij omgevingsvariabelen: volgens POSIX gebruiken de standaardprogramma's namen in hoofdletters en zijn namen met kleine letters gereserveerd voor toepassingen, zodat een naam in kleine letters nooit kan botsen met een standaardnaam. Hoofdletters zijn toch de gevestigde gewoonte, dus wij zouden daarbij blijven en botsingen liever voorkomen met een onderscheidend voorvoegsel (MYAPP_TIMEOUT).

De rijen over CSS en SQL hebben elk een eigen artikel: zie CSS-naamgeving en BEM voor klassenamen en naamgeving in SQL voor de reden waarom databases je richting kleine letters duwen.

Afkortingen: waar de stijlgidsen het oneens zijn

Over userName zijn alle gidsen het eens. Over userID gaan de meningen uiteen. De JavaScript- en Java-gidsen van Google behandelen afkortingen als gewone woorden (xmlHttpRequest, customerId). Go houdt elke afkorting in één letterstand (ServeHTTP, appID). De .NET-richtlijnen van Microsoft schrijven bij een afkorting van twee letters beide met een hoofdletter (IOStream), maar bij langere alleen de eerste letter (HtmlTag). Rust behandelt ze als woorden (Uuid), en PEP 8 geeft de voorkeur aan HTTPServerError boven HttpServerError. In camelCase of PascalCase zetten we de opties naast elkaar.

Zo kies je als je het niet zeker weet

  1. Kijk of het platform voor je beslist. Namen van CSS-eigenschappen, Java-bestandsnamen, geëxporteerde namen in Go en namen van React-componenten (die met een hoofdletter moeten beginnen) zijn geen stijlkeuze.
  2. Volg de officiële gids van de taal. Nieuwe code hoort eruit te zien als de standaardbibliotheek waar hij naast staat.
  3. Pas je aan het bestaande project aan. PEP 8 zegt het ronduit: consistentie binnen een project is belangrijker dan consistentie met de stijlgids.
  4. Laat een linter het onthouden. De regel camelcase van ESLint, de N-regels van Ruff voor Python en de ingebouwde waarschuwingen van rustc vangen uitglijders af voordat een reviewer dat moet doen.
  5. Zet één keer om aan de grens. Komt JSON in snake_case samen met JavaScript in camelCase, hernoem de sleutels dan in één serialisatielaag in plaats van beide stijlen door de hele codebase te laten sijpelen.

© 2026 ConvertCaseHQ. Alle rechten voorbehouden.