camelCase, snake_case y kebab-case: guía rápida de convenciones de nombres

Esta es la versión corta. Los tipos y las clases van en PascalCase en casi todos los lenguajes. Las variables y las funciones van en camelCase en JavaScript, Java, C#, Kotlin y Swift, pero en snake_case en Python, Ruby y Rust. Las constantes van en SCREAMING_SNAKE_CASE en la mayoría de los lenguajes, con Go, Swift, C# y el C++ al estilo de Google como excepciones. Todo lo que acaba en una URL, un archivo CSS o un nombre de paquete suele ir en kebab-case y en minúsculas, y las variables de entorno van en mayúsculas con guiones bajos.
Ese es el patrón. Los detalles son donde se discute en las revisiones de código, así que esta guía rápida se ciñe a lo que dice de verdad la guía de estilo oficial o más extendida de cada lenguaje, y cita la fuente de cada uno.
camelCase, snake_case, kebab-case: los cinco estilos y sus otros nombres
- camelCase (
orderTotal): la primera palabra en minúscula y cada palabra siguiente con mayúscula inicial. También se llama lowerCamelCase; PEP 8 lo llama mixedCase. - PascalCase (
OrderTotal): todas las palabras con mayúscula inicial. También UpperCamelCase, CapWords (PEP 8) o StudlyCaps (PSR-1 de PHP). - snake_case (
order_total): palabras en minúscula unidas por guiones bajos. - SCREAMING_SNAKE_CASE (
ORDER_TOTAL): palabras en mayúscula unidas por guiones bajos. La guía de JavaScript de Google lo llama CONSTANT_CASE, y su guía de Java, UPPER_SNAKE_CASE. - kebab-case (
order-total): palabras en minúscula unidas por guiones. La mayoría de los lenguajes no pueden usarlo en identificadores, porque el guion es el signo menos.
Para pasar un nombre de un estilo a otro, pégalo en nuestro conversor de mayúsculas y minúsculas. Separa las palabras por espacios, guiones bajos, guiones y mayúsculas ya existentes, así que order_total, order-total y OrderTotal se convierten limpiamente entre sí. Eso sí, ve nombre a nombre: trata todo lo que hay en el cuadro como un único identificador.
Guía rápida: convenciones de nombres por lenguaje
| Lenguaje | Variables y funciones | Clases y tipos | Constantes | Fuente |
|---|---|---|---|---|
| JavaScript, TypeScript | camelCase | PascalCase | CONSTANT_CASE para valores a nivel de módulo que nunca cambian | Guías de estilo de Google para JavaScript y TypeScript |
| Java | camelCase | PascalCase | UPPER_SNAKE_CASE para campos static final profundamente inmutables | Google Java Style Guide |
| Kotlin | camelCase | PascalCase | SCREAMING_SNAKE_CASE para const y para valores de nivel superior o de objeto profundamente inmutables | Kotlin coding conventions |
| C# | camelCase para variables locales y parámetros, _camelCase para campos privados, PascalCase para métodos y miembros públicos | PascalCase, con el prefijo I en las interfaces (IWorkerQueue) | PascalCase | Documentación de .NET de Microsoft |
| Swift | camelCase | PascalCase | camelCase | Swift API Design Guidelines |
| Go | camelCase si no se exporta, PascalCase si se exporta | La misma regla | También 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 | camelCase en los métodos; las propiedades quedan a tu criterio | PascalCase (StudlyCaps) | UPPER_SNAKE_CASE en las constantes de clase | PSR-1 |
| C++ | snake_case en variables, PascalCase en funciones | PascalCase | kDaysInAWeek | Google C++ Style Guide (una de varias) |
Algunas filas necesitan una nota. En Go, la primera letra no es una cuestión de estilo: es la regla de visibilidad. Area se exporta fuera de su paquete y area no, y el compilador lo hace cumplir. C++ no tiene una convención común a todo el lenguaje; la propia biblioteca estándar usa snake_case (std::unordered_map, push_back), así que toma la fila de Google como una opción bien documentada, no como la regla.
Rust es especialmente estricto con el estilo. El compilador avisa de serie: escribe fn GetUser() o struct user_account y rustc te sugerirá get_user y UserAccount antes de que hayas pasado ningún linter.
Nombres de archivos, módulos y paquetes
- Java: una clase pública de nivel superior tiene que estar en un archivo con exactamente su nombre, mayúsculas incluidas.
OrderServiceva enOrderService.java, y javac rechaza cualquier otra cosa. - Kotlin: un archivo que contiene una sola clase lleva el nombre de esa clase. Los demás archivos reciben un nombre descriptivo en UpperCamelCase, como
ProcessDeclarations.kt. - Python: los módulos llevan nombres cortos y todo en minúsculas, con guiones bajos si mejoran la legibilidad. Los paquetes también deben tener nombres cortos y en minúsculas, y PEP 8 desaconseja los guiones bajos en ellos.
- Ruby: archivos en snake_case con el nombre de la clase que contienen, así que
HelloWorldvive enhello_world.rb. - Go: los nombres de paquete son palabras sueltas en minúsculas, sin guiones bajos ni mixedCaps:
base64, noencoding_base64niencodingBase64. - JavaScript y TypeScript: no hay una regla única. La guía de JavaScript de Google pide nombres de archivo todo en minúsculas con guiones bajos o guiones, y su guía de TypeScript usa snake_case. La guía de Airbnb dice que el nombre de un archivo debe coincidir con su exportación por defecto, así que una clase
CheckBoxvive enCheckBox.js. Elige una por proyecto y déjala por escrito. - Paquetes de npm: los nombres de paquete nuevos no pueden contener ninguna letra mayúscula.
Más allá del código fuente: variables de entorno, CSS, HTML, URL, JSON y SQL
| Dónde | Convención | Ejemplo | Por qué |
|---|---|---|---|
| Variables de entorno | SCREAMING_SNAKE_CASE | DATABASE_URL | Coincide con las variables del sistema, como PATH y HOME. Los nombres distinguen entre mayúsculas y minúsculas en Linux y macOS, pero no en Windows. |
| Propiedades CSS | kebab-case | background-color | Lo fija el lenguaje. |
| Propiedades personalizadas de CSS | kebab-case tras dos guiones | --brand-color | Distinguen entre mayúsculas y minúsculas, así que --Brand-Color sería otra propiedad. |
| Nombres de clase CSS | kebab-case, a menudo con BEM | card__title--large | Se lee igual que las propiedades que lo rodean. |
| CSS desde JavaScript | camelCase | el.style.backgroundColor | El objeto style expone los nombres de las propiedades en camelCase. |
| Atributos data de HTML | kebab-case | data-index-number | En JavaScript se leen como dataset.indexNumber. |
| Rutas de URL | kebab-case en minúsculas | /blog/developer-case-styles | Google recomienda guiones en lugar de guiones bajos y trata /APPLE y /apple como URL distintas. |
| Claves JSON | No hay estándar | userId o user_id | Adáptate al consumidor principal y convierte en la frontera. |
| Tablas y columnas SQL | snake_case en minúsculas | order_items | Funciona sin comillas en todas las bases de datos principales. |
Una peculiaridad de las variables de entorno: POSIX dice que las utilidades estándar usan nombres en mayúsculas y reserva para las aplicaciones los nombres que contienen minúsculas, así que un nombre en minúsculas nunca puede chocar con uno estándar. Aun así, las mayúsculas siguen siendo la costumbre establecida, así que nosotros las mantendríamos y, para evitar choques, añadiríamos un prefijo distintivo (MYAPP_TIMEOUT).
Las filas de CSS y SQL tienen cada una su propio artículo: consulta nombres en CSS y BEM para los nombres de clase, y convenciones de nombres en SQL para ver por qué las bases de datos te empujan hacia las minúsculas.
Siglas: donde las guías de estilo no se ponen de acuerdo
Todas las guías coinciden en userName. Se dividen con userID. Las guías de JavaScript y Java de Google escriben las siglas en minúscula como si fueran palabras normales (xmlHttpRequest, customerId). Go mantiene cada sigla entera en mayúsculas o en minúsculas (ServeHTTP, appID). Las directrices de .NET de Microsoft ponen en mayúscula las dos letras de una sigla de dos letras (IOStream), pero solo la primera en las más largas (HtmlTag). Rust las trata como palabras (Uuid), y PEP 8 prefiere HTTPServerError a HttpServerError. Comparamos las opciones una al lado de otra en camelCase frente a PascalCase.
Cómo decidir cuando no lo tienes claro
- Comprueba si la plataforma decide por ti. Los nombres de propiedades CSS, los nombres de archivo de Java, los nombres exportados de Go y los nombres de componentes de React (que deben empezar por mayúscula) no son cuestiones de estilo.
- Sigue la guía oficial del lenguaje. El código nuevo debe parecerse a la biblioteca estándar que tiene al lado.
- Adáptate al proyecto existente. PEP 8 lo dice claramente: la coherencia dentro de un proyecto importa más que la coherencia con la guía de estilo.
- Deja que un linter lo recuerde. La regla
camelcasede ESLint, las reglasNde Ruff para Python y los avisos integrados de rustc detectan los descuidos antes de que tenga que hacerlo un revisor. - Convierte una sola vez, en la frontera. Cuando un JSON en snake_case se encuentra con JavaScript en camelCase, renombra las claves en una única capa de serialización en lugar de dejar que los dos estilos se filtren por todo el código.


