3.1Procedimientos locales, globales y colecciones de procedimientos
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.
🔎 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
- 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.
- Cree un procedimiento global si la regla se usa en varias pantallas, local si solo afecta a una ventana.
- Dele parámetros y un valor de retorno en lugar de hacerlo depender de variables globales.
- Agrupe los procedimientos por tema en colecciones, con nombres explícitos que describan lo que hacen.
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.
- 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.
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.
¿Qué señal obliga a transformar un código en procedimiento?