Crear nuestras propias funciones o procedimientos nos sirve para la reducción de código y hacer el código más legible. Pero antes de comenzar, debemos hacer una diferencia: las funciones nos devolverán valores y los procedimientos no.
Ejemplo. Se requiere crear una función que convierta grados Celsius a grados Fahrenheit. Fórmula:
F = (9/5 * Celsius) + 32
fahrenheit.p
def var celsius as dec no-undo initial 33.9. /* Función para realizar la conversión de Celsius a Fahrenheit */ function getFahrenheit dec(valor as dec): return (9.0 / 5.0) * valor + 32.0. end. display "Celsius: " celsius " , Fahrenheit: " getFahrenheit(celsius).
Nota: Para probar este código puedes entrar a este sitio: https://abldojo.services.progress.com/
Para que el programa funcione, se debe crear primero la función. Recordemos que muchos lenguajes de pogramación hacen una evaluación Top-down. Si invocas una función en el bloque de arriba sin antes definir una función, causará error.
También podríamos agregar otra función que obtenga lo grados Celsius:
/* Función para obtener grados Celsius */ function getCelsius dec (valor as dec): return (valor - 32.0) / (1.8). end function.
También podríamos escribir la misma función pero de esta manera:
FUNCTION getCelsius RETURNS DECIMAL ( INPUT valor AS DECIMAL ): DEFINE VARIABLE celsius AS DECIMAL. ASSIGN celsius = (valor - 32.0) * (5.0 / 9.0). RETURN celsius. END FUNCTION.
Código completo:
def var celsius as dec no-undo initial 33.9. /* Función para realizar la conversión de Celsius a Fahrenheit */ function getFahrenheit dec(valor as dec): return (9.0 / 5.0) * valor + 32.0. end. FUNCTION getCelsius RETURNS DECIMAL ( INPUT valor AS DECIMAL ): DEFINE VARIABLE celsius AS DECIMAL. ASSIGN celsius = (valor - 32.0) * (5.0 / 9.0). RETURN celsius. END FUNCTION. display "Celsius: " celsius " , Fahrenheit: " getFahrenheit(celsius). display "Celsius: " getCelsius(getFahrenheit(celsius)).
Como se pude ver usamos ``ASSIGN`` para asignar valores. En este caso asignamos el resultado de la conversión a la variable ``celsius``. El resultado será:
celsius ---------- Celsius: 33.90 , Fahrenheit: 93.02 Celsius: 33.90
Para realizar la conversión de grados Fahrenheit a Celsius usamos ésta fórmula:
Celsius = (valor - 32.0) * (5.0 / 9.0).
Ejemplo 2. Crear un procedimiento que solo imprima un simple "Hola, mundo".
PROCEDURE imprimirHolaMundo(): MESSAGE "Hola, mundo" VIEW-AS ALERT-BOX. END PROCEDURE.
Para invocarlo:
RUN imprimirHolaMundo.
Ejemplo 3. Crear una función que no necesite parámetros de entrada.
FUNCTION getSaludo RETURNS CHARACTER: RETURN "Hola, programador de OpenEdge". END FUNCTION. DISPLAY getSaludo().
Ejemplo 4. Crear una función que calcule el factorial de un número
FUNCTION calcularFactorial RETURNS DECIMAL ( INPUT numero AS DECIMAL ): DEFINE VARIABLE resultado AS DECIMAL INIT 1. DEFINE VARIABLE contador AS DECIMAL. DO contador = 1 TO numero: resultado = resultado * contador. END. RETURN resultado. END FUNCTION. DISPLAY calcularFactorial(5).
En este caso el resultado será: 120.00
Podríamos modificar la función usando la técnica de recursión:
FUNCTION calcularFactorial RETURNS DECIMAL ( INPUT numero AS DECIMAL ): IF numero = 0 THEN RETURN 1. ELSE RETURN numero * calcularFactorial(numero - 1). END FUNCTION. DISPLAY calcularFactorial(5).
Ambas funciones resuelven el mismo problema. Como se ha visto en los primeros ejemplos: OpenEdge nos permite algunas cosas como omitir colocar la palabra ``INPUT`` o no colocar la palabra ``FUNCTION`` al final de una función.
Más ejemplos en próximas entregas.
Enlaces:
https://www.progresstalk.com/https://abldojo.services.progress.com/
No hay comentarios:
Publicar un comentario