# Computer Programming/Control

This computer programming article is available for pseudocode, Ada, and ooc.

## ConditionalsEdit

Conditional clauses are blocks of code that will only execute if a particular expression (the condition) is true.

### if-elseEdit

The if-else statement is the simplest of the conditional statements. They are also called branches, as when the program arrives at an if statement during its execution, control will "branch" off into one of two or more "directions". An if-else statement is generally in the following form:

```if (condition):
statement
else:
other statement
```

If the original condition is met, then all the code within the first statement is executed. The optional else section specifies an alternative statement that will be executed if the condition is false. Exact syntax will vary between programming languages, but the majority of programming languages (especially procedural and structured languages) will have some form of if-else conditional statement built-in. The if-else statement can usually be extended to the following form:

```if (condition):
statement
else if (condition):
other statement
else if (condition):
other statement
...
else (condition):
another statement
```

Only one statement in the entire block will be executed. This statement will be the first one with a condition which evaluates to be true. The concept of an if-else-if structure is easier to understand with the aid of an example:

```if (temperature is equal to or greater than 40 degrees celsius):
print "It's extremely hot"
else if (temperature is between 30 and 39 degrees):
print "It's hot"
else if (temperature is between 20 and 29 degrees):
print "It's warm"
else if (temperature is between 10 and 19 degrees):
print "It's cool"
else if (temperature is between 0 and 9 degrees):
print "It's cold"
else:
print "It's freezing"
```

### Optimizing hintsEdit

When this program executes, the computer will check all conditions in order until one of them matches its concept of truth. As soon as this occurs, the program will execute the statement immediately following the condition and continue on, without checking any other condition for truth. For this reason, when you are trying to optimize a program, it is a good idea to sort your if-else conditions in descending probability. This will ensure that in the most common scenarios, the computer has to do less work, as it will most likely only have to check one or two "branches" before it finds the statement which it should execute. However, when writing programs for the first time, try not to think about this too much lest you find yourself undertaking premature optimization.

Having said all that, you should be aware that an optimizing compiler might rearrange your if statement at will when the statement in question is free from side effects. Among other techniques optimizing compilers might even apply jump tables and binary searches.

### caseEdit

Often it is necessary to compare one specific variable against several constant expressions. For this kind of conditional expression the case statement exists. For example:

```case X :
when 1 :

Walk_The_Dog;

when 5 :

Launch_Nuke;

when 8 or 10 :

Sell_All_Stock;

when others :

Self_Destruct;

esac;
```

## UnconditionalsEdit

Unconditionals let you change the flow of your program without a condition. You should be careful when using unconditionals. Often they make programs difficult to understand. Read Isn't goto evil? for more information.

### returnEdit

For procedures:

```return
```

For functions:

```return Value
```

### gotoEdit

Goto transfers control to the statement after the label.

```goto Label

Dont_Do_Something;

Label :
```

#### Isn't goto evil?Edit

One often hears that goto is evil and one should avoid using goto. But it is often overlooked that any return which is not the last statement inside a procedure or function is also an unconditional statement — a goto in disguise. There is an important difference though: a return is a forward only use of goto. Exceptions are also a type of goto statement; worse, they need not specify where they are going to!

Therefore if you have functions and procedures with more than one return statement you can just as well use goto. When it comes down to readability the following two samples are almost the same:

```procedure Use_Return
Do_Something

if Test : return

Do_Something_Else

return
end
```
```procedure Use_Goto
Do_Something

if Test : goto Exit

Do_Something_Else

Exit :
return
end
```

Because the use of a goto needs the declaration of a label, the goto is in fact twice as readable than the use of return. So if readability is your concern and not a strict "don't use goto" programming rule then you should rather use goto than multiple returns. Best, of course, is the structured approach where neither goto nor multiple returns are needed:

```procedure Use_If
Do_Something;

if not Test :

Do_Something_Else;

fi;

return
end
```

## LoopsEdit

Loops allow you to have a set of statements repeated over and over again.

### Endless LoopEdit

The endless loop is a loop which never ends and the statements inside are repeated forever. Never is meant as a relative term here — if the computer is switched off then even endless loops will end very abruptly.

```loop :

Do_Something;

repeat
```

### Loop with condition at the beginningEdit

This loop has a condition at the beginning. The statements are repeated as long as the condition is met. If the condition is not met at the very beginning then the statements inside the loop are never executed.

```while (X < 5) :

let X := Calculate_Something

repeat
```

### Loop with condition at the endEdit

This loop has a condition at the end and the statements are repeated until the condition is met. Since the check is at the end the statements are at least executed once.

```loop

X := Calculate_Something

until (X > 5)
```

### Loop with condition in the middleEdit

Sometimes you need to first make a calculation and exit the loop when a certain criterion is met. However when the criterion is not met there is something else to be done. Hence you need a loop where the exit condition is in the middle.

```loop

X := Calculate_Something

if X > 5 : exit

Do_Something (X)

repeat
```

### for loopEdit

Quite often one needs a loop where a specific variable is counted from a given start value up or down to a specific end value. You could use the while loop here — but since this is a very common loop there is an easier syntax available.

```for I := 1 to 10 :

Do_Something (I)

repeat
```

#### for loop on arraysEdit

Another very common situation is the need for a loop which iterates over every element of an array. The following sample code shows you how to achieve this:

```for-each I in X :

X [I] := Get_Next_Element;

repeat
```