Control Structures
These are examples of control structures. You may also be interested in:

 Conditional structures
 Exceptions
 Flow-control structures
 Loops

Task

List the conditional structures offered by a programming language. See Wikipedia: conditionals for descriptions.

Common conditional structures include if-then-else and switch.

Less common are arithmetic if, ternary operator and Hash-based conditionals.

Arithmetic if allows tight control over computed gotos, which optimizers have a hard time to figure out.



@VAR a b = 1 2;                   
 
// -------------------------------------------------------------------------------------
//  @IF verb  (returns 0u0 = UNIT, if no then: or else: block is executed) 
//  ========  (note: both then: and else: keywords are optional)
 
@SAY "@IF 1   " ( @IF (a > b) then:{"then:"} else:{"else:"} ); 
@SAY "@IF 2   " ( @IF (b > a) else:{"else:"} then:{"then:"} );
@SAY "@IF 3   " ( @IF (a > b) then:{"then:"}                );
@SAY "@IF 4   " ( @IF (b > a) then:{"then:"}                );
@SAY "@IF 5   " ( @IF (a > b) else:{"else:"}                );
@SAY "@IF 6   " ( @IF (b > a) else:{"else:"}                );
@SAY "@IF 7   " ( @IF (b > a)                               );
 
//  ---------------------------------------------------------------------------------
//  ? verb (conditional operator)
//  ====== ( 1st block (TRUE) is required, 2nd block (FALSE) is optional)
 
@SAY "? 1     " ( (a < b) ? {"1st"} {"2nd"} ); 
@SAY "? 2     " ( (a > b) ? {"1st"} {"2nd"} ); 
@SAY "? 3     " ( (a < b) ? {"1st"}         ); 
@SAY "? 4     " ( (a > b) ? {"1st"}         ); 
 
// -----------------------------------------------------------------------------------
// @CASE verb
// ==========
//
//  - executes code block for first when: condition that evaluates to TRUE
//
//  - normally, ends after running that code block 
//
//  - if no when: conditions are true, executes else: code block (if present)
//
//  - can exit a when: block with @CONTINUE case: verb -- causes @CASE to continue 
//    looking for more true when: blocks or the else: block
 
@VAR n = 0; 
@LOOP times:3
{
  @SAY ( "n =" n "        @CASE results:"
         ( @CASE
             when:(n == 0) { "n == 0(1)"                   } 
             when:(n == 0) { "n == 0(2)"                   } 
             when:(n == 1) { "n == 1(1)"; @CONTINUE case:  }
             when:(n == 1) { "n == 1(2c)"                  }
             else:         { "else"                        }
         ) 
       )
  ;
  n++;
};
 
/] -----------------------------------------------------------------------
 
Output: 
 
@IF 1    else:
@IF 2    then:
@IF 3    0_u0
@IF 4    then:
@IF 5    else:
@IF 6    0_u0
@IF 7    0_u0
? 1      1st
? 2      2nd
? 3      1st
? 4      0_u0
n = 0         @CASE results: n == 0(1)
n = 1         @CASE results: n == 1(2c)
n = 2         @CASE results: else