Convenciones de nombres: camelCase vs snake_case vs kebab-case vs PascalCase
Una guía práctica para nombrar convenciones en JavaScript, Python, Go, SQL, CSS, URL y variables de entorno, con reglas para acrónimos y límites de API.
· 6 min de lectura
La famosa broma de Phil Karlton dice que sólo hay dos cosas difíciles en informática: la invalidación de la caché y nombrar cosas. Ya es bastante difícil elegir buenas palabras; luego también debes decidir cómo unirlas. userId, user_id, UserId, user-id y USER_ID describen todos el mismo concepto, y cada uno es correcto en algún lugar. Esta guía explica las principales convenciones, dónde se espera cada una y cómo manejar los casos incómodos acrónimos, números y límites entre sistemas.
Las principales convenciones
| Nombre | Ejemplo | Uso típico |
|---|---|---|
| el caso del camello | getUserById |
Variables y funciones de JavaScript/TypeScript, métodos Java, campos JSON |
| El caso Pascal | UserProfile |
Clases, tipos, componentes de React, métodos de C# |
| el caso de serpente | get_user_by_id |
Python, Ruby, funciones Rust, columnas de SQL |
| ¿Qué es esto? | MAX_RETRIES |
Constantes, variables del entorno |
| En el caso del kebab | user-profile |
URL, clases CSS, atributos HTML, nombres de archivos, banderas de la interfaz de usuario |
| Cuadro del tren | Content-Type |
Cabeceras HTTP |
| punto.caso | app.server.port |
Claves de configuración, paquetes Java |
Un [convertidor de casos] ((/herramientas/convertidor de casos) puede traducir cualquier nombre entre todos estos a la vez, lo cual es útil cuando se mueven datos entre capas.
Convenciones por idioma y contexto
JavaScript y TypeScript
- Variables, funciones y propiedades de objetos:
camelCase. - Clases, interfaces, alias de tipo, enumeración y componentes de React:
PascalCase. React requiere que los componentes comiencen con una letra mayúscula para que JSX pueda distinguirlos de los elementos HTML. - Constantes verdaderas (configuración que nunca cambia):
SCREAMING_SNAKE_CASE, aunque muchas bases de código usancamelCasepara variablesconst. - Nombres de archivos: a menudo
kebab-case(user-profile.tsx) oPascalCasepara los archivos componentes. Elige uno; las mayúsculas mezcladas en los nombres de archivos causan problemas en los sistemas de archivos insensibles a mayúsculas y minúsculas.
El Python
PEP 8 es explícito: snake_case para funciones, variables y módulos, PascalCase (que PEP 8 llama CapWords) para clases y SCREAMING_SNAKE_CASE para constantes a nivel de módulo. Un subrayado principal señala "interno": _cache.
¡Vete ahora!
Go utiliza camelCase y PascalCase, y el caso tiene significado: los identificadores que comienzan con una letra mayúscula se exportan desde el paquete, las minúsculas son privadas. El estilo Go mantiene las siglas en mayúscula: userID, HTTPServer, parseURL.
Java y C#
Ambos utilizan PascalCase para clases y camelCase para variables locales. Java utiliza camelCase para métodos; C# utiliza PascalCase para métodos y propiedades públicas.
- ¿Qué haces?
snake_case para funciones, variables y módulos; PascalCase para tipos y rasgos; SCREAMING_SNAKE_CASE para constantes y estáticas. El compilador advierte cuando se desvía.
Base de datos SQL
snake_case es la opción segura para tablas y columnas. En PostgreSQL, los identificadores no citados se pliegan en minúsculas, por lo que una columna creada como "userId" debe ser citada para siempre, mientras que user_id funciona en todas partes. Si los nombres de tablas son singulares (user) o plurales (users) es una cuestión de preferencia del equipo; la consistencia importa más que la elección.
CSS y HTML
Las propiedades de CSS son kebab-case (background-color), por lo que los nombres de clases generalmente siguen: .card-header. Metodologías como el BEM añaden estructura: .card__title--active. Los atributos HTML, incluidos los atributos data-*, son insensibles a la mayúscula y mayúscula; JavaScript expone data-user-id como element.dataset.userId.
Direcciones URL
Utilice kebab-case minúscula para las rutas: /blog/compress-image-to-100kb. Google trata los guiones como separadores de palabras pero subraya como unificadores, por lo que los guiones son mejores para SEO. Evite mayúsculas en las URL; muchos servidores tratan las rutas como sensibles a mayúsculas, creando problemas de contenido duplicado.
Variables del medio ambiente
SCREAMING_SNAKE_CASE: DATABASE_URL, STRIPE_SECRET_KEY. Las shells y las plataformas de contenedores esperan esto, y algunas no permiten guiones en los nombres de variables en absoluto.
Acrónimos e iniciales
Aquí es donde los equipos discuten más. ¿Debería ser parseHTTPResponse o parseHttpResponse? ¿userID o userId?
- ** Trate las siglas como palabras** (
parseHttpResponse,userId,XmlParser): recomendadas por las pautas .NET de Microsoft para siglas de más de dos letras, por las guías de estilo Java y JavaScript de Google y por muchas bases de código TypeScript. Evita ejecuciones ilegibles comoHTTPSURLConnectiony convierte limpiamente entre casosparseHttpResponsese convierte enparse_http_responseautomáticamente. - Mantenga las siglas mayúsculas (
parseHTTPResponse,userID): estándar en Go y común en el código Java y Objective-C más antiguo.
Los convertidores automáticos dividen parseHTTPResponse como parse / HTTP / Response, lo que funciona, pero HTTPSURLConnection es ambiguo. Si se controla el estilo, tratar los acrónimos como palabras es más robusto.
Números en los nombres
Mantenga los dígitos adjuntos a la palabra a la que pertenecen: version2, utf8Decoder, base64_encode, h1-title. Evite comenzar identificadores con dígitos; la mayoría de los lenguajes lo prohíben, y las clases CSS que comienzan con dígitos requieren escape.
Cruce de fronteras: API y bases de datos
Los sistemas reales mezclan convenciones. Un backend de Python con snake_case sirve un frontend de JavaScript que espera camelCase, respaldado por una base de datos SQL con columnas snake_case. Las opciones:
- Utilice una convención en el cable. Decida si JSON utiliza
camelCase(la opción más común para las API públicas, que coinciden con JavaScript) osnake_case(común en los ecosistemas Python y Ruby, y utilizado por las API como Stripe y GitHub). Documentarlo y aplicarlo en todas partes. - Convertir en los bordes. Las bibliotecas de serialización pueden convertir automáticamente: generadores de alias de Pydantic,
PropertyNamingStrategiesde Jackson o asignaciones de columnas ORM. Dentro de cada capa, el código permanece idiomático. - No mezcle dentro de una carga útil.
{ "userId": 1, "created_at": "..." }es lo peor de ambos mundos.
Al generar tipos de TypeScript de JSON cubiertos en nuestra guía de JSON a TypeScript mantenga los nombres de propiedades exactamente como aparecen en el cable, y convierta en una capa de mapeo si es necesario.
Escoger las palabras correctas
El estilo del caso es la parte fácil. Unas pocas reglas para las palabras mismas:
- Sé específico.
data,infoyitemno dicen nada.invoiceLinesdice mucho. - Use verbos para funciones y sustantivos para valores.
calculateTotal()devuelvetotal. - ** Nombre booleanos como preguntas.**
isActive,hasAccess,shouldRetry. - Incluir unidades.
timeoutMs,maxSizeBytes,durationSecondsprevienen toda una clase de insectos. - ** Evite las abreviaturas** a menos que sean universales (
id,url,html).usrCntahorra cuatro personajes y le cuesta a cada lector un momento. - ** Coincida con el idioma del dominio.** Si la empresa dice "suscripción", no lo llame
planen código.
Aplicación de los convenios
Escriba las convenciones y deje que las herramientas las apliquen: la regla @typescript-eslint/naming-convention de ESLint, Pylint y Ruff para Python, golint y go vet, los lints incorporados de Rust y stylelint para los patrones de clases CSS. Las comprobaciones automatizadas ponen fin a los debates en la revisión del código y mantienen consistentes las grandes bases de código.
Resumen
Utilice camelCase para valores de JavaScript, PascalCase para tipos y componentes, snake_case para Python, Rust y SQL, kebab-case para URL, CSS y nombres de archivo, y SCREAMING_SNAKE_CASE para constantes y variables de entorno. Trate los acrónimos como palabras cuando pueda, mantenga las unidades en los nombres, elija una convención para cada API, y deje que los linters hagan cumplir las reglas para que los humanos puedan concentrarse en elegir buenas palabras.
Esta página se tradujo automáticamente del inglés. Si encuentras un error, avísanos.