IFE and IFE$

Compiler edit 895 adds new functions:

IFE(expr1,expr2{,flags})

IFE$(expr1$,expr2${,flags})

Without the flags parameter, these act as follows:

IFE(expr1,expr2)     ! if expr1 then expr1 else expr2

IFE$(expr1$,expr2$)  ! if expr1$ # "" then expr1$ else expr2$

The optional flags are defined in ashell.def and may be used to alter the type of test performed on the first expression:

 

 

 

IFE_NB

0

IFE$() default (test if expr1$ "Not Blank")

IFE_NZB

1

Treat "0" same as blanks

IFE_TRUE

0

IFE() default (test if expr1 TRUE)

IFE_FALSE

2

Test if expr FALSE (zero) instead of TRUE

 

For example:

IFE(expr1,expr2,IFE_FALSE)   ! if expr1 = 0 then expr1 else expr2

IFE$(expr1$,expr2$,IFE_NZB)  ! if expr1$ # "0" and expr1$ # "" then expr1$ else expr2$

Note that consistent with the way A-ShellBASIC tests for string equality, trailing blanks are not significant.

IFE() and IFE$() are similar to the IFELSE() and IFELSE$() functions, except:

•   Whereas IFELSE/IFELSE$ uses a separate relative expression argument to decide which of the two possibilities to return, IFE/IFE$ uses the first expression both as the test expression and as a return value (if the test passes).

•   Unlike IFELSE() and IFELSE$() which always evaluates each of the arguments, IFE() and IFE$() do not evaluate the second expression unless the test on first expression fails (i.e. unless the second expression is to be returned.) This is particulary useful when the second expression is a function call or other complex expression with significant overhead and/or side effects.)