Control

Control structures perform a function based of the results of some test.

Data Block | Conditional Statements | if..then..else | Case | Loops

Data Block

Several conditional commands execute one statement when the condition is met. In order to execute multiple commands, they are usually placed in some kind of a block.
           VisualBasic

    Does not provide a generic block construct,
    instead, each type of block conditional requires
    a specific terminating Statement.
    For instance, For ... Next and if ... End if


             Pascal

      Begin
        Statements
      End;



         C++ and Java

    Use curly braces { .. }
    It is a good idea to always include curly braces 
      if more than one line is used in an if statement
      (ie, when the if is on one line and the command is on the next).
    It is a common programming error to add a command and 
      to forget the curly braces. If they are always there
      you should make fewer errors.


Conditional Statements

These languages test conditions in basically the same way except for equality and strings.
           VisualBasic

         if a = b then                  ' Any type of variable
         if str_a = "HI" then
         if isNull(a) then              ' if a = Null always fails

             Pascal

         if (X in [1..80]) and (Y in [1..25]) then
         if fsHidden in File1.FileType then 

         C++ and Java

         if (a == b) then              // Any non-string variables
         if strcmp(str_a, "HI") then   // Strings are arrays of char

  Basic C++ &
Java
Pascal
Equal a = b a == b a = b
Not Equal a <> b a != b a <> b
Inequality < <= >= > < <= >= > < <= >= >
Boolean and or not xor && || !
and or not
and or not xor
Bitwise
Logical
and or not xor & | ~ ^ and or not xor
Range Test n/a n/a X in [1..80]

In C++, and, or, and not are defined as macros which are equivalent to && || and ! respectively.


if .. then .. else

           VisualBasic

Single   if a>5 then a=5 : b=7 else b=2
         a = IIf(a>5, 5, a)    ' IIf(expr, truepart, falsepart)

Block    if a>5 then
            a=5
            b=7
         end if

If condition Then single statement
variable = IIf(expr, truepart, falsepart)

If condition Then
  block
  of
  statements
End If

If i=5 Then
  'do this
ElseIf i = 2 Then
  'do this
Else      
  'statements
End If
C++ Builder & Java 1.1 Single if (a>5) a=5; // The parentheses are required if (a>5) c=1; // Semicolon is required before else else c=2; (a>5) ? a=5; b=7 : a=1; // The parentheses are required // I'm not sure that the assignments work a = (c>d) ? 5 : 6; // if (c>d) then a=5 else a=6 Block if (a>5) { a=5; b=7; } if (a >= b) // No semicolons with blocks { } else if (c==5) { } else { } Delphi Single if a>5 then a:=5; a>5 ? a:=5; b:=7 : a:=1; Block if a>5 then begin a:=5; b:=7; end; if a=5 then a := 6 {Notice: no semicolon} else begin end; {There is a semicolon here} if Isa8088 then cpu := CPU_8088 else if Isa80486 then cpu := CPU_80486 else if Isa80186 then cpu := CPU_80186 else cpu := CPU_UNKNOWN; {Notice: Only one semicolon}

Case

           VisualBasic

   Select Case rtfData.SelColor
      Case vbBlack
         cmbFontColor.ListIndex = 0
      Case vbBlue
         cmbFontColor.ListIndex = 1
      Case vbRed
         cmbFontColor.ListIndex = 2
      Case Else
         cmbFontColor.ListIndex = 3
   End Select

  Select Case SuggestedSize
    Case Is > 15
      Size = 15
    Case Is < 3
      Size = 3
    Case Else
      Size = SuggestedSize
  End Select


             Pascal and Delphi

    The 1st example is from the Delphi SelAttributes example,
    the other 2 are based on examples from the case syntax help
    Searching the help for case may provide no data
    Must search delphi.hlp to get syntax

  case Ord(Alignment) of
    0: LeftAlign.Down := True;
    1: RightAlign.Down := True;
    2: CenterAlign.Down := True;
  end;

  case MySelector of
    1, 2: Writeln('One or Two');
    3..5: Writeln('Three, Four, or Five');
    else  Writeln('More');
  end;

  case Ch of
    'A'..'Z', 'a'..'z':  WriteLn('Letter');
    '0'..'9':            WriteLn('Digit');
    '+', '-', '*', '/':  WriteLn('Operator');
  else
    WriteLn('Special character');
  end;

    Only ordinal constants and ranges are allowed in Delphi 2.0.
        Greater than or less than conditions are not allowed
        Strings are not allowed, but single characters are

             C++ and Java

  // Switch matches the expression results with a case constant
  // Warning: If break; is omitted, the next line is executed!
  switch ( someExpression )
  {
    case 1:
        doCase1( );
        break;
    case 2:
        doCase2( );
        break;
    case 3:
        doCase3A( );
        doCase3B( ); // Fall thru to default 
                     // (always comment an intentional fall thru 
                     //  so that the reader will know that it is 
                     //  not an accident)
    default:
        doDefault( );
  } // end of switch (repeat expression here)


Loops - Do While For Until

           VisualBasic

  For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
  Next [counter]

  for i = 0 to 10
    ...
  next i

  Do [{While | Until} condition]
    [statements]
    [Exit Do]
    [statements]
  Loop

  Do
    [statements]
    [Exit Do]
    [statements]
  Loop [{While | Until} condition]

  While Flag = 1
    [statements]     ' There is no Exit While statement
  Wend



             Pascal

  For i := 1 to 10 do       // For i := 10 downto 1 do
    Begin                   // There is no way to vary the step size
      break;
    End;

  while not Eof(InputFile) do
  begin
    Readln(InputFile, Line);
    Process(Line);
  end;

  Repeat
       Any number of statements
  Until False;

             C++ and Java

  for( [init-expr]; [cond-expr]; [loop-expr] )
       statement


  for ( int i = 0; i < 10; i++ )
  {
      code goes here
  }

  // Do loop, always executes at least once
  do
  {    
    // Place code here

  } while ( i <= 10 );    // The parentheses are required

  // While loop never executes if condition is not initially true
  while ( i < 10 )        // The parentheses are required
  {
    // Place code here
  }



  break;
    transfers control out of the innermost enclosing 
    while, do, for, or switch statement. 
    Java supports an optional label to detrmine the target loop.

  continue; 
    passes control to the next iteration of the innermost enclosing 
    while, do, or for statement.
    Java supports an optional label to detrmine the target loop.

Author: Robert Clemenzi - clemenzi@cpcug.org
URL: http:// cpcug.org / user / clemenzi / technical / Languages / Control.htm