Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Regla 0x0001h: La claridad y prolijidad son de máxima importancia

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

0x0001h: La claridad y prolijidad son de máxima importancia

Enunciado normativo

DEBE escribirse el código de modo que cualquier lector competente comprenda su intención sin la ayuda de su autor. NO DEBE recurrirse a compresión de sentencias, abreviaturas crípticas ni trucos sintácticos que sacrifiquen la claridad por la brevedad.

No es una construcción concreta, sino el criterio rector con el que se juzgan todas las demás reglas de sintaxis.

¿Por qué existe esta regla?

El problema

El código se lee muchas más veces de las que se escribe. Cuando una sentencia concentra varias operaciones, el lector tiene que reconstruir el orden de evaluación y el estado intermedio de cada variable. Ese esfuerzo se paga en cada revisión, en cada sesión de depuración y en cada cambio futuro.

La claridad no es una cuestión estética: se mide por la cantidad de contexto que hay que retener para entender una línea. Una línea que obliga a recordar tres variables y un efecto colateral tiene alta carga cognitiva y, por lo tanto, es propensa al error.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
CompilaciónNinguna: el compilador acepta el código ofuscado sin chistar.
Comportamiento indefinidoEl orden de evaluación no especificado se vuelve invisible y se asume uno erróneo.
Bug silenciosoUn efecto lateral escondido en una expresión pasa desapercibido en la revisión.
MantenibilidadModificar una línea exige desarmarla por completo para no romper otro efecto.
Revisión docenteLa corrección se vuelve lenta y el feedback pierde precisión.

Fundamento en el estándar y en la cátedra

El estándar ISO/IEC 9899:2011 especifica el qué (semántica) pero deja amplios márgenes al cómo: por ejemplo, el orden de evaluación de los operandos no está totalmente determinado (§6.5). La cátedra adopta la claridad como regla cero porque todos los demás códigos de estilo son aplicaciones puntuales de este principio.

Alcance y excepciones

Aplica a todo el código entregado, incluidos ejemplos de clase y pruebas. La prolijidad no se negocia con “total, funciona”. Se exceptúan únicamente los fragmentos generados automáticamente por una herramienta, que igualmente deben documentarse como tales.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Todo el algoritmo en una línea

for (int i=0,j=10;i<j;i++,j--) { printf("%d", i+j); }

Por qué falla: mezcla declaración, dos contadores con direcciones opuestas, la condición y el cuerpo en una sola línea; para saber cuándo termina hay que simular mentalmente la evolución de i y j.

❌ Contraejemplo 2 — Condición con efecto colateral encadenado

if ((p = buscar(clave)) != NULL && p->activo && ++intentos < MAX)
    p->usos++;

Por qué falla: tres chequeos, una asignación y un incremento conviven en la misma expresión; si algo sale mal no se sabe si el problema fue la búsqueda, el contador o el acceso al campo.

✅ Ejemplo conforme 1 — Una idea por línea

int i = 0;
while (i < limite)
{
    printf("%d", i);
    i++;
}

Justificación: cada línea tiene un único efecto visible y el lector sigue el flujo de arriba hacia abajo sin reconstruir expresiones.

✅ Ejemplo conforme 2 — Condición explicitada paso a paso

nodo_t *encontrado = buscar(clave);
bool hay_lugar = intentos < MAX;

if (encontrado != NULL && encontrado->activo && hay_lugar)
{
    encontrado->usos++;
}

Justificación: los subresultados se nombran; la condición final se lee como una frase booleana y cada parte se puede inspeccionar en el depurador.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
Revisión manualSentencias múltiples por línea, expresiones con más de un efecto.
gaffgaff check archivo.cReglas específicas asociadas (0x0002h, 0x0003h, 0x000Fh, ...).
gcc / clanggcc -Wall -Wextra -std=c11 -pedanticNo detecta ofuscación; sí advierte sobre efectos no especificados.

Checklist de autocontrol

Reglas relacionadas