Session 10
Conditionals
Purpose & Structure
Conditionals, or if-statements, are used to evaluate truth conditions. Truth conditions were introduced in the previous session in connection with while- and repeat-loops. With loops, truth conditions serve as stop conditions. With if-statements, truth conditions serve to branch the procedural execution of code. The syntactic frame of conditionals is pretty close to natural language use: If something is the case do this, else do that. The 'something is the case'-part is a condition which can be true or false. Depending on the truth value of the condition, the 'do this' or the 'do that'-part is executed. This is meant by 'branching': You provide several branches and you define conditions to tell the script which branch to take. Any if-statement ends with endif
to tell the script where to continue with the normal procedural execution.
if condition is true
code block
else
code block
endif
The else
section is optional:
if condition is true
code block
endif
In this case, the condition is evaluated; if it is true the code block is executed and the script continues after endif
; if it is false the code block is ignored and the script continues after endif
.
With the optional elsif
, it is possible to evaluate more than one condition:
if first condition is true
code block
elsif second condition is true
code block
elsif third condition is true
code block
else
code block
endif
The order of conditions
does matter!
Conditions are evaluated from top to bottom. The first condition that is true triggers the following code block to be executed, then the script jumps to endif
and continues. If all conditions are false the code block following else
is executed (if it is available).
That's all there is to the syntax of if-statements, so we are ready for a legit example:
# query minimum of selected pitch object
pitch_floor = Get minimum: 0, 0, "Hertz", "Parabolic"
# do something if minimum pitch is less than 130 Hz
if pitch_floor < 130
speaker$ = "male"
endif
The condition pitch_floor < 130 is evaluated. If it is true, the code block (only one statement in the example) is executed. If it is false, nothing happens and the script continues after endif
. Let's add female voices:
pitch_floor = Get minimum: 0, 0, "Hertz", "Parabolic"
if pitch_floor < 130
speaker$ = "male"
elsif pitch_floor < 220
speaker$ = "female"
endif
Suppose pitch_floor is 100, which is less than 130 as well as less than 220. What's the value of speaker$ at the end of the if-statement? It's male, because, as I said before, Praat aborts evaluation and exits the if-statement (i.e. jumps to endif
) as soon as one condition is true. Obviously, the first true condition is 100 < 130.
If you use elsif-sections you have to pay attention to the order of conditions!
If pitch_floor is 175, speaker$ has the value female, because the first condition (175 < 130) is false but the second (175 < 220) is true. If pitch_floor is 245, speaker$ is undefined, because both conditions are false. So, let's add kids:
if pitch_floor < 130
speaker$ = "male"
elsif pitch_floor < 220
speaker$ = "female"
else
speaker$ = "child"
endif
Now, speaker$ contains child whenever the pitch_floor is greater than 220.
A summary of the few rules concerning if-statements:
- A minimal if-statement consists of the reserved word
if
, a condition, a code block, and the reserved wordendif
if
andendif
are allowed only once per if-statement- any number (including 0) of
elsif
sections are permitted - 0 or 1
else
section is allowed
You see, the syntactic structure of conditionals is pretty simple. Nonetheless, they are important and powerful tools. To make the most of conditionals it is essential to understand and exploit the potential of truth conditions, that's why we'll take a closer look at truth conditions in the next section. Of course, this topic is also relevant for while- and repeat loops.
Next: Remarks on Conditions