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 0x0017h: Agrupá sentencias relacionadas y separá bloques lógicos

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

0x0017h: Agrupá sentencias relacionadas y separá bloques lógicos

Enunciado normativo

Dentro de cada función, las sentencias que colaboran en una misma tarea DEBEN agruparse en párrafos, y los párrafos que cumplen tareas distintas DEBEN separarse con una línea en blanco. NO DEBE escribirse un muro continuo de sentencias sin estructura visual.

¿Por qué existe esta regla?

El problema

El ojo humano segmenta por espacios en blanco. Un bloque de treinta líneas sin separación se percibe como una masa uniforme donde no se distinguen las etapas. Con párrafos, el lector ve de un vistazo cuántos pasos tiene la función y dónde empieza cada uno.

Agrupar y separar también revela oportunidades de refactorización: si un párrafo tiene nombre propio, probablemente merezca una función (0x2015h: No dupliques lógica: extraé una función).

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
LecturaEl lector no distingue las fases del algoritmo.
DepuraciónEs difícil poner un punto de corte “entre etapas”.
MantenimientoInsertar código nuevo se vuelve arriesgado sin fronteras claras.
RefactorizaciónNo se ve la estructura de responsabilidades.

Fundamento en la cátedra

Es una aplicación directa de 0x0001h: La claridad y prolijidad son de máxima importancia (prolijidad) a la organización vertical del cuerpo. El uso consistente de líneas en blanco es una de las señales de código cuidado más fáciles de aplicar.

Alcance y excepciones

Aplica al cuerpo de las funciones y a los bloques de control. No se exige línea en blanco entre cada sentencia. Las funciones de tres líneas no necesitan particionarse. Un comentario de sección puede reemplazar a la línea en blanco cuando además explica la intención (0x0201h: Escribí comentarios que expliquen el ‘porqué’, no el ‘qué’).

Ejemplos exhaustivos

❌ Contraejemplo 1 — Muro de sentencias

int procesar(const int v[], size_t n)
{
    int suma = 0;
    int maximo = v[0];
    for (size_t i = 0; i < n; i++) {
        suma += v[i];
        if (v[i] > maximo) {
            maximo = v[i];
        }
    }
    double promedio = (double)suma / (double)n;
    printf("promedio=%f\n", promedio);
    printf("maximo=%d\n", maximo);
    if (promedio > maximo / 2) {
        return 1;
    }
    return 0;
}

Por qué falla: cálculo, formato y decisión están pegados; no se distingue dónde termina el cómputo y dónde empieza la presentación.

❌ Contraejemplo 2 — Separación arbitraria

int suma = 0;

int i = 0;

while (i < n) {

    suma += v[i];

    i++;
}

Por qué falla: separar cada sentencia destruye la agrupación lógica; el párrafo del lazo pierde cohesión y el archivo crece sin aportar claridad.

✅ Ejemplo conforme 1 — Párrafos con propósito

int procesar(const int v[], size_t n)
{
    /* Calculo */
    int suma = 0;
    int maximo = v[0];
    for (size_t i = 0; i < n; i++) {
        suma += v[i];
        if (v[i] > maximo) {
            maximo = v[i];
        }
    }

    /* Presentacion */
    double promedio = (double)suma / (double)n;
    printf("promedio=%f\n", promedio);
    printf("maximo=%d\n", maximo);

    /* Decision */
    if (promedio > (double)maximo / 2.0) {
        return 1;
    }
    return 0;
}

Las tres etapas se distinguen a simple vista y cada bloque podría convertirse en su propia función si creciera.

✅ Ejemplo conforme 2 — Separación sin comentarios

double promedio(const int v[], size_t n)
{
    int suma = 0;
    for (size_t i = 0; i < n; i++) {
        suma += v[i];
    }

    return (double)suma / (double)n;
}

La única línea en blanco separa el cómputo del retorno; es suficiente y no necesita comentario.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gigermétricas por funciónFunciones densas sin líneas en blanco.
gaffgaff check archivo.cReglas 0x0001h y 0x0002h.

Checklist de autocontrol

Reglas relacionadas