En este módulo, aprenderemos sobre subrutinas y procedimientos en el Lenguaje de Control (CL). Estos conceptos son fundamentales para escribir programas modulares y reutilizables. Vamos a desglosar los conceptos clave, proporcionar ejemplos prácticos y ejercicios para reforzar el aprendizaje.

¿Qué son las Subrutinas y Procedimientos?

Subrutinas

Una subrutina es un bloque de código que realiza una tarea específica y puede ser llamada desde diferentes partes de un programa. Las subrutinas ayudan a evitar la duplicación de código y a mejorar la legibilidad y el mantenimiento del programa.

Procedimientos

Un procedimiento es similar a una subrutina, pero generalmente se refiere a un bloque de código más grande y complejo que puede incluir múltiples subrutinas. Los procedimientos también pueden aceptar parámetros y devolver valores.

Ventajas de Usar Subrutinas y Procedimientos

  • Reutilización de Código: Permiten reutilizar el mismo bloque de código en diferentes partes del programa.
  • Modularidad: Facilitan la división del programa en partes más pequeñas y manejables.
  • Mantenimiento: Hacen que el código sea más fácil de mantener y actualizar.
  • Legibilidad: Mejoran la legibilidad del código al reducir la complejidad.

Sintaxis Básica de Subrutinas y Procedimientos en CL

Definición de una Subrutina

Para definir una subrutina en CL, utilizamos el comando SUBR. Aquí hay un ejemplo básico:

PGM
    DCL VAR(&RESULT) TYPE(*DEC) LEN(5 2)
    CALLSUBR SUBR1
    CALLSUBR SUBR2
    ENDPGM

SUBR SUBR1
    /* Código de la subrutina 1 */
    CHGVAR VAR(&RESULT) VALUE(10)
    ENDSUBR

SUBR SUBR2
    /* Código de la subrutina 2 */
    CHGVAR VAR(&RESULT) VALUE(&RESULT + 5)
    ENDSUBR

Llamada a una Subrutina

Para llamar a una subrutina, utilizamos el comando CALLSUBR seguido del nombre de la subrutina.

CALLSUBR SUBR1

Procedimientos con Parámetros

Los procedimientos pueden aceptar parámetros de entrada y devolver valores. Aquí hay un ejemplo de un procedimiento con parámetros:

PGM
    DCL VAR(&NUM1) TYPE(*DEC) LEN(5 2) VALUE(10)
    DCL VAR(&NUM2) TYPE(*DEC) LEN(5 2) VALUE(20)
    DCL VAR(&RESULT) TYPE(*DEC) LEN(5 2)

    CALLSUBR ADDNUMS PARM(&NUM1 &NUM2 &RESULT)
    ENDPGM

SUBR ADDNUMS
    DCL VAR(&P1) TYPE(*DEC) LEN(5 2)
    DCL VAR(&P2) TYPE(*DEC) LEN(5 2)
    DCL VAR(&RES) TYPE(*DEC) LEN(5 2)

    CHGVAR VAR(&RES) VALUE(&P1 + &P2)
    ENDSUBR

Ejercicio Práctico

Ejercicio 1: Crear una Subrutina para Calcular el Cuadrado de un Número

  1. Define una subrutina llamada SQUARE que acepte un número como parámetro y devuelva su cuadrado.
  2. Llama a la subrutina desde el programa principal y muestra el resultado.

Solución

PGM
    DCL VAR(&NUM) TYPE(*DEC) LEN(5 2) VALUE(4)
    DCL VAR(&RESULT) TYPE(*DEC) LEN(5 2)

    CALLSUBR SQUARE PARM(&NUM &RESULT)
    SNDPGMMSG MSG('El cuadrado de ' *CAT &NUM *CAT ' es ' *CAT &RESULT)
    ENDPGM

SUBR SQUARE
    DCL VAR(&N) TYPE(*DEC) LEN(5 2)
    DCL VAR(&RES) TYPE(*DEC) LEN(5 2)

    CHGVAR VAR(&RES) VALUE(&N * &N)
    ENDSUBR

Ejercicio 2: Crear un Procedimiento para Sumar y Restar Números

  1. Define un procedimiento llamado CALCULATE que acepte dos números y devuelva su suma y resta.
  2. Llama al procedimiento desde el programa principal y muestra los resultados.

Solución

PGM
    DCL VAR(&NUM1) TYPE(*DEC) LEN(5 2) VALUE(15)
    DCL VAR(&NUM2) TYPE(*DEC) LEN(5 2) VALUE(5)
    DCL VAR(&SUM) TYPE(*DEC) LEN(5 2)
    DCL VAR(&DIFF) TYPE(*DEC) LEN(5 2)

    CALLSUBR CALCULATE PARM(&NUM1 &NUM2 &SUM &DIFF)
    SNDPGMMSG MSG('La suma de ' *CAT &NUM1 *CAT ' y ' *CAT &NUM2 *CAT ' es ' *CAT &SUM)
    SNDPGMMSG MSG('La diferencia entre ' *CAT &NUM1 *CAT ' y ' *CAT &NUM2 *CAT ' es ' *CAT &DIFF)
    ENDPGM

SUBR CALCULATE
    DCL VAR(&A) TYPE(*DEC) LEN(5 2)
    DCL VAR(&B) TYPE(*DEC) LEN(5 2)
    DCL VAR(&S) TYPE(*DEC) LEN(5 2)
    DCL VAR(&D) TYPE(*DEC) LEN(5 2)

    CHGVAR VAR(&S) VALUE(&A + &B)
    CHGVAR VAR(&D) VALUE(&A - &B)
    ENDSUBR

Resumen

En esta sección, hemos aprendido sobre subrutinas y procedimientos en CL. Hemos visto cómo definir y llamar subrutinas, así como cómo trabajar con procedimientos que aceptan parámetros y devuelven valores. Estos conceptos son esenciales para escribir programas modulares y eficientes en CL. Asegúrate de practicar los ejercicios para reforzar tu comprensión y prepararte para los temas más avanzados.

© Copyright 2024. Todos los derechos reservados