Sintaxis Básica y Nomenclatura (0x00XX)¶
Regla 0x0000h: La claridad y prolijidad son de máxima importancia¶
El código debe ser claro y fácil de entender para cualquier lector, no solo para su autor. Un código limpio y prolijo previene errores, facilita el mantenimiento y mejora la colaboración en equipo. La claridad es siempre preferible a técnicas de programación ofuscadas que solo complican la comprensión.
- for (int i = 0, j = 10; i < j; i++, j--) { printf("%d", i+j); }
+ int i = 0;
+ int j = 10;
+ while (i < j)
+ {
+ printf("%d", i + j);
+ i++;
+ j--;
+ }Regla 0x0001h: Los identificadores deben ser descriptivos¶
Los nombres de variables, funciones y demás identificadores deben reflejar con precisión su propósito. Esto contribuye a que el código sea autodescriptivo, minimizando la necesidad de comentarios adicionales. El uso de nombres significativos facilita la lectura y la comprensión.
Identificadores inadecuados:
int a, b;
a = obtener_precio();
b = calcular_descuento(a);Identificadores adecuados:
int precio, descuento;
precio = obtener_precio();
descuento = calcular_descuento(precio);Sin embargo, no debés temer el uso de nombres de variables cortos¶
Bajo ciertas condiciones, los nombres cortos son aceptables y hasta preferibles:
Si el ámbito de la variable es reducido (visible en una sola pantalla).
Si la variable se utiliza con alta frecuencia en ese ámbito.
Si existe un identificador de una o dos letras cuyo significado es obvio en el contexto (matemático, contadores, etc.).
Probá y observá si el nombre corto contribuye a la legibilidad.
El ejemplo canónico es el uso de i y j como variables de control en lazos. Otras situaciones se presentan al implementar algoritmos matemáticos donde la notación es estándar.
Regla 0x0002h: Una declaración de variable por línea¶
-int a, b, c;
+int a;
+int b;
+int c;Regla 0x0003h: Siempre debés inicializar las variables a un valor conocido¶
Es imperativo que una variable utilizada como R-Value contenga un valor conocido antes de su uso.
Aunque un sistema operativo moderno pueda inicializar la memoria en 0, la reutilización de la misma puede introducir valores residuales. No debés confiar en una inicialización implícita.
Incorrecto:
int contador;Correcto:
int contador = 0;Esto incluye evitar inicializaciones implícitas en estructuras.¶
Incorrecto:
struct Datos datos;Correcto:
struct Datos datos = {0};Regla 0x0004h: Un espacio antes y después de cada operador binario¶
-uno=dos+tres;
+uno = dos + tres;Incorrecto:
resultado=valor1*valor2+offset;Correcto:
resultado = valor1 * valor2 + offset;
Regla 0x0005h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves¶
Esto permite una alineación consistente y mejora la legibilidad de la estructura del código.
Incorrecto (indentación inconsistente):
void funcion() {
int x = 10;
if (x > 5) {
printf("Mayor");
}
}Correcto (indentación de 4 espacios):
void funcion() {
int x = 10;
if (x > 5) {
printf("Mayor");
}
}Esto aplica incluso para bloques de una sola línea.
- if (condicion) accion;
+ if (condicion) {
+ accion;
+ }Regla 0x0006h: El asterisco de los punteros debe declararse junto al identificador¶
Esta convención facilita la identificación visual de una variable como puntero y mejora la claridad.
-int* ptr;
+int *ptr;Regla 0x0007h: Los argumentos de función y las variables locales deben usar snake_case en minúsculas¶
Incorrecto:
int miVariable; void miFuncion(int UnArgumento) { /* ... */ }Correcto:
int mi_variable; void mi_funcion(int un_argumento) { /* ... */ }
Regla 0x0008h: Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE¶
Esta convención de estilo de nomenclatura mejora la legibilidad. Un identificador en mayúsculas actúa como una señal visual inmediata, indicando que se trata de un valor inmutable.
Incorrecto:
const int diasDeLaSemana = 7; #define pi 3.14159fCorrecto:
const int DIAS_DE_LA_SEMANA = 7; #define PI 3.14159f float calcular_circunferencia(float radio) { return 2 * PI * radio; }
Regla 0x0009h: Las líneas de código no deben exceder los 79 caracteres¶
Nunca debés escribir líneas que excedan los 79 caracteres. El límite de 80 columnas es un estándar de facto que facilita la lectura y la visualización de código en paralelo. Las líneas largas fatigan la vista y requieren desplazamiento horizontal.
Incorrecto:
printf("Este es un mensaje de registro extremadamente largo que definitivamente excede el límite de 79 caracteres y hace que el código sea mucho más difícil de leer para otros desarrolladores.\n");Correcto:
printf("Este es un mensaje de registro extremadamente largo que se divide " "en múltiples líneas para cumplir con el estándar de 80 columnas.\n");
Regla 0x000Ah: Escribí comentarios que expliquen el “porqué”, no el “qué”¶
Los comentarios deben aportar valor y aclarar la intención detrás del código, no parafrasear lo que el código ya expresa de forma evidente. El código en sí mismo debe ser lo suficientemente claro para explicar qué hace.
Incorrecto (Comentario obvio y redundante):
// Incrementa i en 1 i++;Correcto (Comentario que explica la intención):
// Se utiliza un índice inverso para procesar los elementos desde el final, // ya que el último elemento tiene un significado especial en el protocolo. for (size_t i = tamano - 1; i < tamano; i--) { // ... }