In this lesson we will learn how to work with control statements. We will first learn how to use conditional blocks like
if ... else blocks and then we will learn how to perform loops.
If … else
When a program needs to take decisions according to certain conditions, the
if ... else block is the default choice.
Let’s suppose that we want to write a simple implementation of the absolute value of a number. The absolute value of a number is defined as the number itself, if the number is positive, or the opposite if the value is negative. This is the typical case where the
if ... else construct is useful! We can write a simple
absolute function in this way:
function absolute(x) if x >= 0 return x else return -x end end
As you can see, an
if ... else block is closed with the word
end, like a function.
If we need to check more than one condition, we can bind together conditions using:
- “and” is written as
&(if both statements are true return true, else return false)
- “or” is written as
||(if at least one statement is true return true, else return false)
For example, if we want to check whether 3 is both minor than 4 and major than 1 we type:
if 1 < 3 & 3 < 4 print("eureka!") end
If we want to check if a value satisfies one of several different conditions, we can use the
elseif statement: Julia will check if the first condition specified in the
if is satisfied, if it is not met it moves on to the first
elseif and so on.
x = 42 if x<1 print("$x < 1") elseif x < 3 print("$x < 3") elseif x < 100 print("$x < 100") else print("$x is really big!") end >>> 42 < 100
I take the occasion to introduce string interpolation. With the indication
$x we tell Julia that it must substitute to
$x the value of
x, in this case 42. This is particularly useful when we want to print values, or we want to make custom messages:
name1 = "traveler" name2 = "techytok" print("Welcome $name1, this is $name2 :)")
A loop is the operation of repeating the same set of instructions several times. Loops are useful when we want to compute the value of a function over several points, we need to perform some operations on the elements of an array or we need to print the elements of a list.
Sometimes we want to iterate over a list of values and perform some operation on each element.
For example let’s suppose we want to print all the squares of the numbers comprised between 1 and 10, we can do it using a
for i in 1:10 println(i^2) end
i is the variable which contains the data which gets updated at each new cycle (in this case
i holds the numbers from 1 to 10 respectively), while
1:10 is a range. A range is an iterable object which does exactly what its name suggests: it specifies the range on which the loop has to be performed (in this case 1 to 10).
It is also possible to use the alternative notation
for i = 1:10 which is completely equivalent.
Please notice that it is possible to loop not only over ranges (which can also be specified using the
range function) but also lists (i.e. arrays, tuples, etc).
For example, let’s suppose we have a list of persons and we want to greet all of them, we can do it with the
persons = ["Alice", "Bob", "Carla", "Daniel"] for person in persons println("Hello $person, welcome to techytok!") end
Here instead of a range, we iterate over the elements of
persons (i.e. the names of the persons that I want to greet) and in this case
person will hold the name of a single person, which changes at each iteration step.
For more informations on arrays and collection types, please refer to this lesson.
In the case we want to forcefully interrupt a for loop we can use the
break statement, for example:
for i in 1:100 if i>10 break else println(i^2) end end
Here we check if
i>10, in that case we break the loop and finish the iteration, else we print
This is the opposite of
continue will forcefully skip the current iteration and move to the next cycle:
for i in 1:30 if i % 3 == 0 continue else println(i) end end
This loop prints all the numbers from 1 to 30 except the multiples of 3.
When a loop needs to continue until a certain condition is met, a
while loop is the preferable choice:
function while_test() i=0 while(i<30) println(i) i += 1 end end
While blocks can access and change the values of variables in the scope of the block in which they are defined. For more info on variable scope, see this lesson.
enumerate is a function which comes in handy when we need to iterate on an array (or similar) and we need to keep track of the number of iterations we have already performed.
enumerate will return an iterator (which is something like an array which can be iterated in for loops). It will produce couples of the form
x = ["a","b","c"] for couple in enumerate(x) println(couple) end (1, "a") (2, "b") (3, "c")
The same result could have been obtained “manually”:
x = ["a","b","c"] enum_array = [(1,"a"), (2,"b"), (3,"c")] for i in 1:length(x) println(enum_array[i]) end (1, "a") (2, "b") (3, "c")
Let’s say we want to read the elements from an array, square them and store them in another array, we can do it in this way:
my_array1 = collect(1:10) my_array2 = zeros(10) for (i, element) in enumerate(my_array1) my_array2[i] = element^2 end >>>print(my_array2) [1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0]
For comparison, we could have written the same loop in the following way:
my_array1 = collect(1:10) my_array2 = zeros(10) for i in 1:length(my_array1) my_array2[i] = my_array1[i]^2 end >>>print(my_array2) [1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0]
For more information on iterators and the enumerate function, please refer to this documentation page.
In this lesson we have learned how to let a program take “decisions” using
if ... elseif ... else blocks, how to perform loops using
while and how to have control on such loops using
continue. We have then given an example of how
enumerate can be used to help the process of filling an array.
If you liked this lesson and you would like to receive further updates on what is being published on this website, I encourage you to subscribe to the newsletter! If you have any question or suggestion, please post them in the discussion below!
Thank you for reading this lesson and see you soon on TechyTok!