In this section, we will delve into the concepts of functions and subroutines in REXX. These are essential for writing modular, reusable, and maintainable code. We will cover the following topics:

  1. Introduction to Functions and Subroutines
  2. Defining and Calling Functions
  3. Passing Arguments
  4. Returning Values
  5. Practical Examples
  6. Exercises

  1. Introduction to Functions and Subroutines

Functions and subroutines are blocks of code designed to perform specific tasks. They help in breaking down complex problems into smaller, manageable parts. In REXX, functions and subroutines can be user-defined or built-in.

  • Functions: Return a value and can be used in expressions.
  • Subroutines: Perform tasks but do not return a value directly.

  1. Defining and Calling Functions

Defining a Function

A function in REXX is defined using the RETURN statement to return a value. Here is the basic syntax:

myFunction: PROCEDURE
  /* Function code */
  RETURN result

Calling a Function

A function is called by using its name followed by parentheses. If the function takes arguments, they are passed within the parentheses.

result = myFunction(arg1, arg2)

Example

/* Define a function to add two numbers */
addNumbers: PROCEDURE
  ARG num1, num2
  sum = num1 + num2
  RETURN sum

/* Call the function */
result = addNumbers(5, 10)
SAY "The sum is:" result

  1. Passing Arguments

Arguments are passed to functions and subroutines using the ARG statement. You can pass multiple arguments separated by commas.

Example

/* Define a function to concatenate two strings */
concatStrings: PROCEDURE
  ARG str1, str2
  result = str1 || str2
  RETURN result

/* Call the function */
result = concatStrings("Hello, ", "World!")
SAY result

  1. Returning Values

The RETURN statement is used to return a value from a function. The value can be of any data type, such as a number, string, or even another function's result.

Example

/* Define a function to calculate the factorial of a number */
factorial: PROCEDURE
  ARG num
  IF num = 0 THEN RETURN 1
  result = num * factorial(num - 1)
  RETURN result

/* Call the function */
result = factorial(5)
SAY "The factorial of 5 is:" result

  1. Practical Examples

Example 1: Function to Check Even or Odd

/* Define a function to check if a number is even or odd */
isEven: PROCEDURE
  ARG num
  IF num // 2 = 0 THEN RETURN "Even"
  ELSE RETURN "Odd"

/* Call the function */
result = isEven(7)
SAY "The number 7 is:" result

Example 2: Subroutine to Print a Message

/* Define a subroutine to print a message */
printMessage: PROCEDURE
  ARG message
  SAY message

/* Call the subroutine */
CALL printMessage "Hello, REXX!"

  1. Exercises

Exercise 1: Create a Function to Calculate the Area of a Rectangle

Task: Write a function calculateArea that takes the length and width of a rectangle as arguments and returns the area.

/* Define the function */
calculateArea: PROCEDURE
  ARG length, width
  area = length * width
  RETURN area

/* Call the function */
result = calculateArea(5, 10)
SAY "The area of the rectangle is:" result

Exercise 2: Create a Subroutine to Print a Multiplication Table

Task: Write a subroutine printMultiplicationTable that takes a number as an argument and prints its multiplication table up to 10.

/* Define the subroutine */
printMultiplicationTable: PROCEDURE
  ARG num
  DO i = 1 TO 10
    SAY num "x" i "=" num * i
  END

/* Call the subroutine */
CALL printMultiplicationTable 5

Conclusion

In this section, we have covered the basics of functions and subroutines in REXX. We learned how to define and call functions, pass arguments, and return values. We also explored practical examples and exercises to reinforce the concepts. Understanding functions and subroutines is crucial for writing efficient and modular REXX programs. In the next section, we will explore built-in functions in REXX.

© Copyright 2024. All rights reserved