To make code easier to read when you want to perform some logic on the first TRUE condition that you encounter, instead of using cascading IF THEN ELSE, you can use a CASE TRUE statement (it works because a CASE enters the first block that has a condition that matches the criteria of the CASE).
All of the WHEN criteria must be code constructs that evaluates to a LOGICAL.
This trick works great for range conditions, but it can also be used in many other contexts.
DEFINE VARIABLE deSomePercentage AS DECIMAL NO-UNDO INITIAL 42.9.
DEFINE VARIABLE lAccept20And60 AS LOGICAL NO-UNDO INITIAL FALSE.
CASE TRUE:
WHEN lAccept20And60 AND (deSomePercentage >= 20 AND deSomePercentage <= 60)
THEN DO:
/* do some logic */
END.
WHEN deSomePercentage > 20 AND deSomePercentage < 60
THEN DO:
/* do some logic */
END.
WHEN deSomePercentage > 60
THEN DO:
/* do some logic */
END.
OTHERWISE DO:
/* do some logic */
END.
END CASE.
Comments
CASE TRUE instead of cascading IF THEN ELSE
I performed some tests, but for more complex condition-testing, it's better to use the if-statement (when you look at performance :)).
furthermore it's an everlasting discussion to use the if or case for better readable code
I'll bet the performance
I'll bet the performance difference is trivial, so I would vote for readability.