Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
image_expression_null_value_handling [2022/08/20 18:57]
admin [Null Evaluation]
— (current)
Line 1: Line 1:
-====== Image Expression Null Value Handling ====== ​ 
- 
-===== General Rules for Expression Definition ===== 
- 
-  * The entire expression is one single expression resulting in one single value. ​ 
- 
-  * Everything ​ is an expression and produces one single value. So, even an "if then  else" is just one expression resulting in one single value. Therefore, ​ you can sum the results of two separate "if then else"s like "(if the  else)  + (if then else)"​. ​ Since even the test clause of an "if then  else" is an expression, you can also replace that with another "if then  else". Example: 
-        * if (if i1 > 0 then 1 else i2) then i2 else 1 + i3 
- 
-  * The "if then else" test assumes that 0 is false and any non-zero value is true. 
- 
-===== Null Evaluation ===== 
- 
-  * Every time the expression being evaluated results in null, the entire ​ expression becomes null. So, "i1 + null" will always be null since  something + null is always null. 
- 
-  * The only operators that can contain the "​destructive power" of a null value are ''​isnull( ​ expression )''​ or ''​expression1 ? expression2'':​ 
-    - ''​isnull( expression )''​ evaluates the expression and results 1 if the expression evaluates to null, and 0 otherwise. 
-    - ''​expression1 ​ ? expression2''​ evaluates the ''​expression1''​ and, if the result is  non-null, returns that value. Otherwise, it evaluates ''​expression2''​ and returns the resulting value as its own result. 
- 
-  * Null can come from an image, but it can also be produced by some other  events, such as dividing by zero, failing to find a key in a lookup ​ table etc. 
- 
-  * If the "if then else" test evaluates to null, the entire "if then else" evaluates to null. Example: 
-    * (if (i1/3 > 9) then i2 else 1 + i3) + 10  
-      1. if  i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null. Therefore, the "if then else" test is null and the entire "if then else" is null.  
-      2. Now, null is being added to 10, and that also becomes null. 
-    * '((if (i1/3 > 9) then i2 else 1 + i3) + 10) ? 20' (Note that we are using the operator ? now) 
-      1. if  i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null. Therefore, the "if then else" test is null and the entire "if then else" ​ is null.  
-      2. Then, null is being added to 10, and that also becomes null. 
-      3. Now, null is being caught by the expression "null ? 20", since the "if then else" + 10 is null, and the result is 20.