En este tema, aprenderemos sobre subrutinas y funciones en el contexto de scripting con DCL (Digital Command Language) en OpenVMS. Las subrutinas y funciones son bloques de código reutilizables que permiten estructurar mejor los scripts, mejorar la legibilidad y facilitar el mantenimiento.

Conceptos Clave

  1. Subrutina: Un bloque de código que realiza una tarea específica y puede ser llamado desde diferentes partes del script.
  2. Función: Similar a una subrutina, pero generalmente devuelve un valor.
  3. Parámetros: Valores que se pasan a subrutinas o funciones para que operen sobre ellos.
  4. Retorno de Valores: El valor que una función devuelve al finalizar su ejecución.

Definición de Subrutinas

En DCL, las subrutinas se definen utilizando el comando GOSUB y se terminan con RETURN. Aquí hay un ejemplo básico:

$! Ejemplo de Subrutina en DCL
$! Definición de la subrutina
$ SUBRUTINA:
$   WRITE SYS$OUTPUT "Esta es una subrutina."
$   RETURN

$! Llamada a la subrutina
$ GOSUB SUBRUTINA
$ EXIT

Explicación del Código

  • $ SUBRUTINA:: Define el inicio de la subrutina llamada SUBRUTINA.
  • WRITE SYS$OUTPUT "Esta es una subrutina.": Imprime un mensaje en la salida estándar.
  • RETURN: Indica el final de la subrutina y devuelve el control al punto desde donde fue llamada.
  • GOSUB SUBRUTINA: Llama a la subrutina SUBRUTINA.

Definición de Funciones

Las funciones en DCL se pueden implementar utilizando subrutinas, pero con la capacidad adicional de devolver valores. Aquí hay un ejemplo de una función que suma dos números:

$! Ejemplo de Función en DCL
$! Definición de la función
$ SUMA:
$   P1 = P1 + P2
$   RETURN P1

$! Llamada a la función
$ P1 = 5
$ P2 = 10
$ GOSUB SUMA
$ WRITE SYS$OUTPUT "La suma es: ", P1
$ EXIT

Explicación del Código

  • $ SUMA:: Define el inicio de la función llamada SUMA.
  • P1 = P1 + P2: Suma los valores de P1 y P2 y almacena el resultado en P1.
  • RETURN P1: Indica el final de la función y devuelve el valor de P1.
  • GOSUB SUMA: Llama a la función SUMA.

Parámetros en Subrutinas y Funciones

Para pasar parámetros a subrutinas y funciones, se pueden utilizar variables globales o locales. Aquí hay un ejemplo de cómo pasar parámetros:

$! Ejemplo de Subrutina con Parámetros en DCL
$! Definición de la subrutina
$ MULTIPLICA:
$   RESULTADO = P1 * P2
$   RETURN

$! Llamada a la subrutina con parámetros
$ P1 = 4
$ P2 = 3
$ GOSUB MULTIPLICA
$ WRITE SYS$OUTPUT "El resultado de la multiplicación es: ", RESULTADO
$ EXIT

Explicación del Código

  • $ MULTIPLICA:: Define el inicio de la subrutina llamada MULTIPLICA.
  • RESULTADO = P1 * P2: Multiplica los valores de P1 y P2 y almacena el resultado en RESULTADO.
  • RETURN: Indica el final de la subrutina y devuelve el control al punto desde donde fue llamada.
  • GOSUB MULTIPLICA: Llama a la subrutina MULTIPLICA.

Ejercicio Práctico

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

Instrucciones:

  1. Define una subrutina llamada FACTORIAL que calcule el factorial de un número.
  2. La subrutina debe recibir un número como parámetro y devolver el resultado.
  3. Llama a la subrutina desde el script principal y muestra el resultado.

Solución:

$! Ejemplo de Subrutina para Calcular el Factorial en DCL
$! Definición de la subrutina
$ FACTORIAL:
$   FACT = 1
$   CONTADOR = 1
$   WHILE CONTADOR <= P1
$   CONTADOR = CONTADOR + 1
$   FACT = FACT * CONTADOR
$   ENDWHILE
$   RETURN FACT

$! Llamada a la subrutina
$ P1 = 5
$ GOSUB FACTORIAL
$ WRITE SYS$OUTPUT "El factorial de ", P1, " es: ", FACT
$ EXIT

Explicación del Código

  • $ FACTORIAL:: Define el inicio de la subrutina llamada FACTORIAL.
  • FACT = 1: Inicializa la variable FACT a 1.
  • CONTADOR = 1: Inicializa la variable CONTADOR a 1.
  • WHILE CONTADOR <= P1: Bucle que se ejecuta mientras CONTADOR sea menor o igual a P1.
  • CONTADOR = CONTADOR + 1: Incrementa el valor de CONTADOR en 1.
  • FACT = FACT * CONTADOR: Multiplica FACT por CONTADOR y almacena el resultado en FACT.
  • ENDWHILE: Fin del bucle WHILE.
  • RETURN FACT: Indica el final de la subrutina y devuelve el valor de FACT.
  • GOSUB FACTORIAL: Llama a la subrutina FACTORIAL.

Conclusión

En esta sección, hemos aprendido cómo definir y utilizar subrutinas y funciones en DCL. Hemos visto cómo pasar parámetros y devolver valores, y hemos practicado con un ejercicio para calcular el factorial de un número. Las subrutinas y funciones son herramientas poderosas que nos permiten escribir scripts más organizados y reutilizables.

En el próximo tema, exploraremos el manejo de errores en DCL para hacer nuestros scripts más robustos y confiables.

Curso de Programación en OpenVMS

Módulo 1: Introducción a OpenVMS

Módulo 2: Comandos Básicos de OpenVMS

Módulo 3: Sistema de Archivos de OpenVMS

Módulo 4: Scripting con DCL

Módulo 5: Gestión del Sistema OpenVMS

Módulo 6: Redes en OpenVMS

Módulo 7: Programación Avanzada en OpenVMS

Módulo 8: Clustering en OpenVMS

Módulo 9: Seguridad en OpenVMS

Módulo 10: Solución de Problemas y Optimización

© Copyright 2024. Todos los derechos reservados