Nombrar variables y funciones en inglés
En esta lección
Ponerle nombre a las cosas es una de las partes más difíciles de programar. Un buen nombre explica qué hace el código sin necesidad de comentarios; uno malo obliga a todos a descifrarlo. Además, casi toda la comunidad profesional escribe los nombres en inglés, incluso en equipos españoles. En esta lección aprenderás las convenciones de escritura, los patrones de nombres en inglés y los errores típicos de los hispanohablantes.
Por qué en inglés
Aunque tu proyecto sea en español, conviene que el código esté en inglés por varias razones:
- Las palabras reservadas del lenguaje (
if,for,return) ya son inglesas. Mezclarsioparaes imposible, y mezclarcalcularTotal()conifresulta raro de leer. - Las librerías y los frameworks usan inglés. Tu código convive con
user.map(...)ogetElementById(...). - Si algún día trabajas con gente de otros países, o subes tu proyecto a GitHub, nadie se entera de un nombre como
nombreUsuario. - Los nombres en inglés suelen ser más cortos:
useren vez deusuario,listen vez delista.
Nota: esto no es una norma universal. Si en tu empresa o proyecto de clase se usa español, sigue la regla del grupo. Lo importante es ser consistente: no mezcles
userNameconnombreCompletoen el mismo proyecto.
Los estilos de escritura
Un nombre con varias palabras no puede llevar espacios, así que cada lenguaje tiene una forma de unirlas. Estos son los cinco estilos que verás.
| Estilo | Pronunciación | Ejemplo | Se usa en |
|---|---|---|---|
| camelCase | /kámel keis/ | userName, getTotal | Variables y funciones en JS, Java, TS |
| PascalCase | /páskal keis/ | UserProfile, ShoppingCart | Clases, componentes (React) |
| snake_case | /snéik keis/ | user_name, get_total | Variables y funciones en Python, SQL, Ruby |
| kebab-case | /kébab keis/ | main-menu, user-card | Clases CSS, URLs, nombres de archivo |
| UPPER_SNAKE_CASE | /áper snéik keis/ | MAX_SIZE, API_URL | Constantes |
El nombre viene de cómo se ven: camel (camello) tiene “jorobas” en las mayúsculas del medio; snake (serpiente) va pegada al suelo con guiones bajos; kebab parece un pincho con guiones; Pascal es el nombre de un lenguaje y de un matemático.
const userName = "Ana"; // camelCase: variable
const MAX_USERS = 100; // UPPER_SNAKE_CASE: constante
class ShoppingCart {} // PascalCase: clase
function getTotalPrice() {} // camelCase: función
En Python se prefiere snake_case:
user_name = "Ana"
MAX_USERS = 100
class ShoppingCart:
pass
def get_total_price():
pass
Y en CSS, los nombres de clase suelen ser kebab-case:
.main-menu { display: flex; }
.user-card__title { font-size: 1.2rem; }
Ten en cuenta que kebab-case no puede usarse como nombre de variable en JavaScript: user-name se interpretaría como user menos name.
Verbos y sustantivos: la regla básica
La regla de oro:
- Las variables y las clases se nombran con sustantivos (
user,price,ShoppingCart). - Las funciones se nombran con verbos (
getUser,calculateTotal,sendEmail).
| Mal | Bien | Por qué |
|---|---|---|
data | userList | data no dice nada |
x | total | Una letra no explica |
calc() | calculateTotal() | Un verbo completo |
userData() | getUserData() | Una función necesita verbo |
tmp | previousValue | Los temporales confunden |
doIt() | submitForm() | doIt no describe la acción |
Los verbos más comunes en nombres de funciones ya los viste en Verbos del código: get, set, add, remove, create, delete, update, find, load, save, send, show, hide, validate.
Nombres para valores booleanos
Las variables y funciones que guardan o devuelven verdadero/falso se nombran como una pregunta que se contesta con sí o no. Se usan estos prefijos:
| Prefijo | Pronunciación | Significa | Ejemplo |
|---|---|---|---|
| is | /is/ | ¿es…? | isActive, isEmpty |
| has | /jas/ | ¿tiene…? | hasPermission, hasItems |
| can | /can/ | ¿puede…? | canEdit, canDelete |
| should | /shud/ | ¿debería…? | shouldUpdate |
| was / did | /uas/, /did/ | ¿ha ocurrido…? | wasSaved, didFail |
const isLoggedIn = true;
const hasUnreadMessages = false;
if (isLoggedIn && !hasUnreadMessages) {
console.log("All clear"); // All clear
}
Se lee casi como una frase: “if is logged in and not has unread messages”. Evita nombres ambiguos como login, status o check para un booleano: no sabes si son verdadero o falso.
Cuidado: evita los negativos en el nombre, como
isNotValidodisabled = false. Pensar en dobles negaciones (“si no está no válido”) es difícil. UsaisValidy niégalo con!isValid.
Singular y plural
Una convención sencilla pero muy útil:
| Qué guarda | Nombre | Ejemplo |
|---|---|---|
| Un solo elemento | singular | user, product, item |
| Una lista | plural | users, products, items |
| Un número de elementos | count o total | userCount, totalItems |
const users = ["Ana", "Luis"];
for (const user of users) {
console.log(user); // Ana, Luis
}
Aquí users es la lista y user es cada elemento. Se lee “for each user of users”, una frase natural en inglés. Cuidado con los plurales irregulares: person → people, child → children, category → categories, index → indexes o indices, status → statuses, data (que ya es plural de datum pero se usa como singular).
Nombres de clases y de cosas
Los nombres de clases son sustantivos en singular y con mayúscula inicial: User, Product, Order, ShoppingCart. Los de las funciones y métodos son verbos. Las interfaces y los componentes suelen terminar en un sustantivo que dice qué son: UserList, LoginForm, ProductCard.
Y los sufijos que indican el papel:
| Sufijo | Pronunciación | Significado | Ejemplo |
|---|---|---|---|
| -er / -or | /er/, /or/ | el que hace algo | parser, listener, validator |
| Handler | /jándler/ | gestor de un evento | clickHandler |
| Service | /sérvis/ | servicio | UserService |
| Manager | /mánayer/ | gestor | FileManager |
| Factory | /fáctori/ | fábrica | UserFactory |
| Util(s) | /iútils/ | utilidades | DateUtils |
| Config | /cónfig/ | configuración | appConfig |
| Props / State | /props/, /steit/ | propiedades / estado | userState |
Abreviaturas aceptadas
En programación se abrevia mucho. Algunas son universales y otras confunden.
| Abreviatura | Significa | Se pronuncia |
|---|---|---|
i, j | índices de bucle | /ai/, /yei/ |
n | número | /en/ |
tmp | temporary | /témporeri/ |
err | error | /er/ |
msg | message | /mésech/ |
btn | button | /báton/ |
img | image | /ímech/ |
idx | index | /índeks/ |
num | number | /nam/ |
max / min | maximum / minimum | /maks/, /min/ |
str | string | /strin/ |
arr | array | /arréi/ |
obj | object | /óbyect/ |
param(s) | parameter(s) | /paráms/ |
config | configuration | /konfíg/ |
req / res | request / response | /rekuést/, /rispóns/ |
db | database | /di-bi/ |
id | identifier | /ai-di/ |
Abrevia solo si la abreviatura es de uso común. calcTtlPrc es un horror; calculateTotalPrice es perfecto.
Qué evitar
Estos son los nombres que más dificultan la lectura:
- Una sola letra (excepto
i,jen bucles yx,yen coordenadas). - Nombres genéricos:
data,info,stuff,thing,temp,foo,bar. - Nombres engañosos:
userListque en realidad es un objeto. - Nombres demasiado largos:
getTheTotalPriceOfAllTheItemsInTheCart(mejorgetCartTotal). - Nombres sin significado:
var1,var2. - Mezclar idiomas:
getNombre(),totalPrecio. - Mezclar estilos:
user_nameyuserAgeen el mismo archivo JavaScript.
Dos ejemplos para comparar:
// Hard to read
function f(a, b) {
return a * b * 0.21;
}
// Easy to read
function calculateVat(price, quantity) {
const VAT_RATE = 0.21;
return price * quantity * VAT_RATE;
}
console.log(calculateVat(10, 3)); // 6.3
VAT (/vi ei ti/, Value Added Tax) es el IVA. Cuando una sigla española no tiene equivalente claro, escribe el concepto completo (nationalIdNumber mejor que dni).
Qué dice la convención de cada lenguaje
| Lenguaje | Variables y funciones | Clases | Constantes |
|---|---|---|---|
| JavaScript / TypeScript | camelCase | PascalCase | UPPER_SNAKE_CASE |
| Python | snake_case | PascalCase | UPPER_SNAKE_CASE |
| Java | camelCase | PascalCase | UPPER_SNAKE_CASE |
| PHP | camelCase / snake_case | PascalCase | UPPER_SNAKE_CASE |
| SQL | snake_case | snake_case | UPPERCASE (palabras clave) |
| CSS | kebab-case | kebab-case | --kebab-case |
Si trabajas en un proyecto existente, sigue sus reglas aunque difieran.
Errores frecuentes
- Mezclar español e inglés:
getUsuario()ototalPrecio. Elige un idioma y mantenlo. - Traducir literalmente con un traductor:
borrarPedidono siempre eseraseOrder; lo normal esdeleteOrder. Mira cómo lo hacen las librerías. - Olvidar el verbo en las funciones:
userName()no dice qué hace;getUserName()sí. - Poner
sde plural donde no toca:dataya significa varios datos; no pongasdatas. Ynewses singular. - Falsos amigos:
actualsignifica “real”, no “actual”. Para el valor de ahora usacurrent(currentUser,currentPage). - Nombres demasiado cortos o largos: busca el equilibrio. Piensa si otra persona los entendería sin explicación.
Resumen
| Tema | Regla |
|---|---|
| Idioma | Código en inglés, coherente en todo el proyecto |
| Variables | Sustantivos, camelCase o snake_case |
| Funciones | Verbos: getUser, calculateTotal |
| Clases | Sustantivos en singular, PascalCase |
| Constantes | UPPER_SNAKE_CASE |
| Booleanos | is, has, can, should |
| Listas | Plural: users; cada elemento, singular: user |
| Evitar | Una letra, data, tmp, mezcla de idiomas y estilos |
Ahora que sabes nombrar, es hora de enfrentarte a lo que te dice el ordenador cuando algo sale mal: Mensajes de error.
Pon a prueba lo que has aprendido
¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.