3.1 · Procedimientos locales, globales y colecciones de procedimientos

Nivel 3 · Avanzado: WLangage en profundidad

3.1Procedimientos locales, globales y colecciones de procedimientos

Objetivo: Factorizar el código en procedimientos, elegir el ámbito adecuado y organizar colecciones reutilizables para la aplicación de venta.
Tiempo estimado: 11 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Un procedimiento es un bloque con nombre y reutilizable: local a una ventana, global al proyecto o agrupado en una colección por tema.
  • Los parámetros y el valor de retorno hacen genérico un procedimiento; el paso por valor trabaja sobre una copia, el paso por referencia modifica el original.
  • Un procedimiento = una responsabilidad y un nombre explícito; se limitan las variables globales y se convierte todo copiar y pegar en un procedimiento.

Mini-caso hilado — Yacine factoriza los cálculos de su gestión

Yacine desarrolla la aplicación de gestión de una pyme de venta de material eléctrico en Orán: clientes, productos, pedidos, facturas y existencias. Ha copiado y pegado el cálculo del descuento por fidelidad en tres pantallas, y cada cambio de tarifa le obliga a corregirlo tres veces. Crea CalculeRemiseFidelite y CalculeMontantTTC como procedimientos globales, agrupados en la colección GestionCommerciale. En cambio, RéinitialiseSaisie sigue siendo un procedimiento local a la ventana de pedido, porque solo se usa allí. También sustituye sus variables globales por parámetros y valores de retorno. Anota el reflejo: duplicación = procedimiento, ámbito según el uso, colección por tema.

Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto de 48 h de la sección 3.1.

1. Tres ámbitos, tres usos

Un procedimiento es un bloque de código con nombre y reutilizable: se escribe una vez y se llama tantas veces como sea necesario. Su ámbito depende del lugar donde se declara. El procedimiento local pertenece a una ventana o a un informe: solo se puede usar en esa pantalla. El procedimiento global se declara a nivel del proyecto y es accesible en todas partes: ahí viven las reglas de negocio reutilizables. La colección de procedimientos agrupa procedimientos por tema (cálculos comerciales, utilidades de fechas, acceso a un servicio): es la organización natural de un proyecto que crece.

2. Parámetros, valor y referencia

Un procedimiento recibe parámetros — los datos que necesita — y puede devolver un valor: entonces se habla a menudo de función. El paso por valor transmite una copia: el procedimiento puede modificar su parámetro sin tocar la variable de origen. El paso por referencia transmite la propia variable: el procedimiento puede modificarla. Confundir ambos es una fuente clásica de errores, sobre todo cuando Yacine cree que un total se ha actualizado cuando en realidad trabajaba sobre una copia.

3. Calidad: una responsabilidad, un nombre

Un buen procedimiento hace una sola cosa y lleva un nombre explícito que la describe: CalculeMontantTTC, ControleCodePostal. Se mantiene corto, recibe lo que necesita por parámetros y devuelve su resultado. Se limitan las variables globales, porque cualquier pantalla puede modificarlas y volver imprevisible el comportamiento. Por último, en cuanto Yacine se dispone a copiar y pegar código, lo convierte en un procedimiento: es la señal más fiable.

Error frecuente de interpretación: «Un procedimiento local es visible en todas partes; los parámetros siempre los puede modificar el procedimiento; y las variables globales simplifican el mantenimiento». No, triple error. Un procedimiento local solo se puede usar en su ventana o su informe: para un uso transversal hace falta un procedimiento global o una colección. Un parámetro pasado por valor es una copia: el procedimiento no modifica el original, solo el paso por referencia lo permite. Y las variables globales, modificables desde cualquier sitio, vuelven el código imprevisible y la depuración penosa. Yacine prefiere parámetros, retornos y colecciones con nombre.
Ámbitos y reutilización de los procedimientos Local para una pantalla, global para el proyecto, colección para organizar por tema. Procedimiento locallimitado a una ventana+Procedimiento globalaccesible en todas partes+Colección de procedimientosagrupados por tema Elegir el ámbito según el uso; evitar las variables globales.
Local para una pantalla, global para el proyecto, colección para organizar por tema.
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Yacine, desarrollador WinDev en una pyme de venta de material eléctrico en Orán, comprueba que el cálculo del descuento por fidelidad está copiado en tres pantallas de su aplicación de gestión. 2) Lo transforma en el procedimiento global CalculeRemiseFidelite, con parámetros y un valor de retorno, y lo guarda en la colección GestionCommerciale junto con CalculeMontantTTC; en cambio, RéinitialiseSaisie sigue siendo local a la ventana de pedido. 3) Sustituye las variables globales por parámetros, elige un nombre explícito para cada procedimiento y verifica el paso por valor o por referencia según quiera modificar el original o no. Lección: un procedimiento con nombre, bien ubicado y bien parametrizado elimina la duplicación y hace mantenible la aplicación.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Dos procedimientos globales, un solo cálculo

Yacine agrupa las reglas comerciales en la colección GestionCommerciale:

// Collection GestionCommerciale — procédures globales
PROCEDURE CalculeMontantTTC(nMontantHT est un monetaire, nTauxTVA est un reel = 19)
    RENVOIE nMontantHT * (1 + nTauxTVA / 100)

PROCEDURE CalculeRemiseFidelite(nCA est un monetaire, nAnciennete est un entier)
    SI nAnciennete >= 5 ALORS
        RENVOIE nCA * 0.05
    FIN
    RENVOIE 0

// Fenêtre FicheCommande : appel explicite, sans variable globale
nTTC est un monetaire = CalculeMontantTTC(SAI_MontantHT, 19)
nRemise est un monetaire = CalculeRemiseFidelite(CLI_CA, CLI_Anciennete)

Lectura: la regla se escribe una sola vez y se llama desde cualquier pantalla.

Lección: parámetros y retorno documentan la dependencia; ninguna variable global oculta.

Vocabulario de la sección

Procedimiento
Bloque de código con nombre y reutilizable, escrito una vez y llamado tantas veces como sea necesario.

Ejemplo sencillo: Yacine llama a CalculeMontantTTC desde la ventana de pedido y la de factura.

Lo que no es: código recopiado de forma idéntica en tres eventos diferentes.

Reflejo: duplicación que eliminar → un procedimiento.

Procedimiento global
Procedimiento declarado a nivel del proyecto y accesible desde todas las pantallas y tratamientos.

Ejemplo sencillo: CalculeRemiseFidelite vive en una colección global.

Lo que no es: un procedimiento declarado en una sola ventana e invisible en las demás.

Reflejo: regla usada en todas partes → procedimiento global.

Colección de procedimientos
Elemento del proyecto que agrupa procedimientos por tema para organizar un proyecto que crece.

Ejemplo sencillo: GestionCommerciale reúne los cálculos de descuento, de IVA y de porte.

Lo que no es: procedimientos dispersos sin agrupación temática.

Reflejo: organizar por tema → una colección.

Paso por valor
Transmisión de una copia del parámetro: el procedimiento no modifica la variable de origen.

Ejemplo sencillo: Yacine pasa un importe a un procedimiento de cálculo sin alterar la entrada.

Lo que no es: un procedimiento que actualiza directamente la variable del llamador.

Reflejo: original intacto → paso por valor.

Paso por referencia
Transmisión de la propia variable: el procedimiento puede modificar el valor de origen.

Ejemplo sencillo: Yacine hace que un procedimiento rellene una tabla de líneas mediante una referencia.

Lo que no es: una copia local perdida al terminar el procedimiento.

Reflejo: modificar el original → paso por referencia.

En la práctica — En la práctica — Estructurar el código en procedimientos

  1. Localice un tratamiento copiado y pegado (o a punto de serlo): es la señal de que debe convertirse en un procedimiento, como en el caso de Yacine.
  2. Cree un procedimiento global si la regla se usa en varias pantallas, local si solo afecta a una ventana.
  3. Dele parámetros y un valor de retorno en lugar de hacerlo depender de variables globales.
  4. Agrupe los procedimientos por tema en colecciones, con nombres explícitos que describan lo que hacen.
Su código está organizado en piezas reutilizables, con nombre y comprobables, sin duplicación: la base de una aplicación mantenible.

Guion paso a paso — factorizar como Yacine (4 min)

1) Busque un cálculo o un control recopiado en varias pantallas. 2) Decida el ámbito: global para un uso transversal, local para una sola pantalla. 3) Escriba el procedimiento con sus parámetros y su valor de retorno. 4) Guárdelo en una colección temática con un nombre explícito. 5) Sustituya las copias por llamadas y compruebe que ninguna variable global transporte el estado.

Mantenga este reflejo: si está a punto de copiar y pegar, deténgase y cree un procedimiento.

Modelo para copiar y pegar — la ficha de procedimientos de Yacine

Signal     : duplication, longueur, complexite, besoin de tester
Portee     : LOCALE (une fenetre) / GLOBALE (tout le projet)
Collection : regrouper par theme (commercial, dates, services)
Parametres : valeur (copie) / reference (modifie l'original)
Qualite    : une responsabilite, un nom explicite, peu de globales

Un descuento copiado tres veces

Yacine crea CalculeRemiseFidelite como procedimiento global: ahora basta con una sola corrección.

Un control propio de una pantalla

Yacine mantiene ControleSaisieCommande como procedimiento local a la ventana de pedido.

Un total sin actualizar

Yacine creía modificar el original: pasa el parámetro por referencia y corrige el error.

Procedimientos desordenados

Yacine agrupa cálculos, fechas y exportaciones en tres colecciones claras de la gestión.

✓ Buenas prácticas

  • Convertir todo copiar y pegar en un procedimiento.
  • Elegir el ámbito según el uso real.
  • Preferir parámetros y retornos a las variables globales.

✗ Errores frecuentes

  • Poner una regla transversal en un procedimiento local.
  • Confundir el paso por valor y por referencia.
  • Acumular variables globales modificables desde cualquier sitio.

Puntos clave

  • Un procedimiento es un bloque con nombre y reutilizable que elimina la duplicación.
  • Local (una ventana), global (todo el proyecto) o agrupado en colección por tema.
  • El paso por valor copia; el paso por referencia modifica el original.
  • Una responsabilidad por procedimiento, un nombre explícito y pocas variables globales.

Reto 48 h — aplícalo mañana

Como Yacine, abra su aplicación y localice un cálculo copiado y pegado en al menos dos pantallas. Transfórmelo en un procedimiento global con parámetros y un valor de retorno, y guárdelo en una colección con un nombre explícito. Verifique por último si necesita un paso por valor o por referencia, y elimine la variable global que haya quedado inútil.

Lista de salida de la sección
  • Puedo explicar la diferencia entre procedimiento local y global.
  • Sé crear una colección de procedimientos por tema.
  • Distingo el paso por valor y el paso por referencia.
Autoevaluación 1-5: ¿detecto rápido el código que hay que factorizar?Autoevaluación 1-5: ¿limito las variables globales?

Preguntas frecuentes

¿Cuándo conviene crear un procedimiento en lugar de escribir el código ahí mismo?

En cuanto el código se usa varias veces, un tratamiento se alarga o un bloque merece un nombre para ser comprendido. La señal número uno sigue siendo la duplicación: si copia y pega, o está a punto de hacerlo, conviértalo en un procedimiento. Una regla de negocio —cálculo de IVA, descuento por fidelidad, control de un código— acabará sirviendo en otro lugar: pantalla, informe, importación o servicio web.

¿Por qué hay que limitar las variables globales?

Porque una variable global puede leerse y modificarse desde cualquier sitio, en cualquier momento: el código se vuelve imprevisible y los errores muy difíciles de localizar. Un procedimiento que depende de una global esconde esa dependencia en su firma. Prefiera parámetros y valores de retorno: el procedimiento se vuelve reutilizable, comprobable y previsible.

Comprueba tu comprensión

¿Qué señal obliga a transformar un código en procedimiento?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 3Preguntas inéditas y más difíciles para validar tus conocimientos