Begins a block of conditional text.
This macro preprocessor directive begins a block of conditional text. It takes an ObjectScript expression as an argument, tests the truth value of the argument, and compiles a block of code if the truth value of its argument is true. The block of code concludes with a #else, #elseIf, or #endif directive.
// subsequent indented lines for specified actions
// next preprocessor directive
where <expression> is a valid ObjectScript expression. If <expression> evaluates to a non-zero value, it is true.
KILL ^MyColor, ^MyNumber
#define ColorDay $ZDate($H,12)
SET ^MyColor = "Red"
SET ^MyNumber = 1
SET ^MyColor = "Orange"
SET ^MyNumber = 2
SET ^MyColor = "Yellow"
SET ^MyNumber = 3
SET ^MyColor = "Green"
SET ^MyNumber = 4
SET ^MyColor = "Blue"
SET ^MyNumber = 5
SET ^MyColor = "Purple"
SET ^MyNumber = -1
WRITE ^MyColor, ", ", ^MyNumber
This code sets the value of the ColorDay macro to the name of the day at compile time. The conditional statement that begins with #if then uses the value of ColorDay to determine how to set the value of the ^MyColor variable. This code has multiple conditions that can apply to ColorDay — one for each weekday after Monday; the code uses the #elseIf directive to check these. The fall-through case is the code that follow the #else directive. The #endif closes the conditional.
Any number of spaces may separate #if and <expression>. However, no spaces are permitted within <expression>. Anything following <expression> on the same line is considered a comment and is not parsed.
If #if appears in method code and has an argument other than a literal value of 0 or 1, the compiler generates code in subclasses (rather than invoking the method in the superclass). To avoid generating this code, test conditions for a value of 0 or 1, which results in simpler code and optimizes performance.