One of the useful things that you can do with a variable is to use it to count. Here is a method that uses a variable in this way.
method numberOf(letter:String) in (str:String) → Number {
// returns the number of occurrences of letter in str
var count := 0
for (str) do { each →
if (letter == each) then { count := count + 1 }
}
return count
}
The fact that the variable is called count is convenient, but doesn’t affect what the program does.
Notice the statement in the then on line 6:
count := count + 1
Read this “count gets (count + 1)”.
It’s vitally important to understand that the expression count + 1
on the right-hand-side of the assignment symbol := is evaluated first.
So if count was 7, count + 1 is 8.
Assignment causes count to “forget” its old value, and assigns it a new
value—in this example, 8. So, if count was 7, it is now 8.
Similarly, if count was 0, it’s now 1. If count was 1, it’s now 2.
The assignment doesn’t happen until after the right-hand-side has been
evaluated, using the old value of the variable count.
Thus, the value of count is increased by 1 every time the loop
finds that letter == each.
Notice that we are not changing the number 7 into 8; that would be really
weird! We are re-binding the variable count to 8 (assuming that
it was previosuly bound to 7).