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 19:09]
admin
— (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''​ 
-        - 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.  
-        - 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)) 
-         - 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.  
-         - Then, null is being added to 10, and that also becomes null. 
-         - Now, null is being caught by the expression ''​null ? 20'',​ since the ''​if then else + 10''​ is null, and the result is 20.