Control flow
Like other programming languages, Kotlin is capable of making decisions based on whether a piece of code is evaluated to be true. Such pieces of code are called conditional expressions. Kotlin is also able to create and iterate through loops.
Conditional expressions
Kotlin provides if
and when
for checking conditional expressions.
If
To use if
, add the conditional expression within parentheses ()
and the action to take if the result is true within curly braces {}
:
There is no ternary operator condition ? then : else
in Kotlin. Instead, if
can be used as an expression. When using if
as an expression, there are no curly braces {}
:
When
Use when
when you have a conditional expression with multiple branches. when
can be used either as a statement or as an expression.
Here is an example of using when
as a statement:
Place the conditional expression within parentheses
()
and the actions to take within curly braces{}
.Use
->
in each branch to separate each condition from each action.
Here is an example of using when
as an expression. The when
syntax is assigned immediately to a variable:
If when
is used as an expression, the else branch is mandatory, unless the compiler can detect that all possible cases are covered by the branch conditions.
The previous example showed that when
is useful for matching a variable. when
is also useful when you need to check a chain of Boolean expressions:
Ranges
Before talking about loops, it's useful to know how to construct ranges for loops to iterate over.
The most common way to create a range in Kotlin is to use the ..
operator. For example, 1..4
is equivalent to 1, 2, 3, 4
.
To declare a range that doesn't include the end value, use the ..<
operator. For example, 1..<4
is equivalent to 1, 2, 3
.
To declare a range in reverse order, use downTo.
For example, 4 downTo 1
is equivalent to 4, 3, 2, 1
.
To declare a range that increments in a step that isn't 1, use step
and your desired increment value. For example, 1..5 step 2
is equivalent to 1, 3, 5
.
You can also do the same with Char
ranges:
'a'..'d'
is equivalent to'a', 'b', 'c', 'd'
'z' downTo 's' step 2
is equivalent to'z', 'x', 'v', 't'
Loops
The two most common loop structures in programming are for
and while
. Use for
to iterate over a range of values and perform an action. Use while
to continue an action until a particular condition is satisfied.
For
Using your new knowledge of ranges, you can create a for
loop that iterates over numbers 1 to 5 and prints the number each time.
Place the iterator and range within parentheses ()
with keyword in
. Add the action you want to complete within curly braces {}
:
Collections can also be iterated over by loops:
While
while
can be used in two ways:
To execute a code block while a conditional expression is true. (
while
)To execute the code block first and then check the conditional expression. (
do-while
)
In the first use case (while
):
Declare the conditional expression for your while loop to continue within parentheses
()
.Add the action you want to complete within curly braces
{}
.
In the second use case (do-while
):
Declare the conditional expression for your while loop to continue within parentheses
()
.Define the action you want to complete within curly braces
{}
with the keyworddo
.
For more information and examples of conditional expressions and loops, see Conditions and loops.
Now that you know the fundamentals of Kotlin control flow, it's time to learn how to write your own functions.
Practice
Exercise 1
Using a when
expression, update the following program so that when you input the names of GameBoy buttons, the actions are printed to output.
Button | Action |
---|---|
A | Yes |
B | No |
X | Menu |
Y | Nothing |
Other | There is no such button |
Exercise 2
You have a program that counts pizza slices until there’s a whole pizza with 8 slices. Refactor this program in two ways:
Use a
while
loop.Use a
do-while
loop.
Exercise 3
Write a program that simulates the Fizz buzz game. Your task is to print numbers from 1 to 100 incrementally, replacing any number divisible by three with the word "fizz", and any number divisible by five with the word "buzz". Any number divisible by both 3 and 5 must be replaced with the word "fizzbuzz".
- Hint
Use a
for
loop to count numbers and awhen
expression to decide what to print at each step.
Exercise 4
You have a list of words. Use for
and if
to print only the words that start with the letter l
.
- Hint
Use the
.startsWith()
function forString
type.