I'm writing some documentation and a question occurred to me. Why are the GREL Controls:
isBlank
isNonBlank
isNull
isNotNull
isNumeric
isError
Controls rather than Functions? The current documentation says
There are inline controls to support branching and essentially looping. They look like functions, but unlike functions, their arguments don't all get evaluated down to value before they get run. A control can decide which part of the code to execute and can affect the environment bindings. Functions, on the other hand, can't do either. Each control decides which of their arguments to evaluate to value, and how.
But while I see this is true of the other controls (with, if, forEach, filter etc.), the 'isX' family don't seem (to me) to fulfil the definition of a Control as defined here.
Is there any reason these are put with Controls rather than functions? And if not, any view on reorganising them into functions?
Thanks
Owen