Hello and welcome to today's journey into loops in Kotlin! Imagine you've been assigned the task to count the trees in your area. Will you do it individually? That's not efficient, right? That's where loops come to the rescue, saving both time and effort by automating repetitive tasks. Kotlin offers two types of loops, for
and while
. Our focus today is on for loops, which are used when the number of repetitions is known.
Let's start with the for
loop. It's an orderly and efficient way of accomplishing tasks repetitively in Kotlin. If you have a list of names and want to print them, you can use the for
loop:
Kotlin1fun main() { 2 // Our list of names 3 val names = listOf("John", "Sarah", "Jane", "Tom") 4 5 // Our 'for' loop 6 for (name in names) { 7 println(name) // Prints each name in the list 8 } 9}
Every iteration of the loop picks a new name
from names
and prints it.
Are you ready to explore for
loops further? Kotlin provides the flexibility to denote ranges that define a start and end value. To print numbers from 1 to 5, you can do:
Kotlin1fun main() { 2 // Loop from 1 to 5 and print each number 3 for (i in 1..5) { 4 println(i) // Outputs numbers 1 through 5 5 } 6}
To execute a loop in reverse, we can use the downTo
keyword:
Kotlin1fun main() { 2 // Loop from 5 to 1 3 for (i in 5 downTo 1) { 4 println(i) // Outputs numbers 5 to 1 in descending order 5 } 6}
It's time to practice! If you want to print the numbers 1 through 10 and all elements of an array, refer to the example below:
Kotlin1fun main() { 2 // Loop to print numbers 1 through 10 3 for (num in 1..10) { 4 println(num) // Prints numbers 1 to 10 5 } 6 7 // Loop to iterate through an array 8 val numbers = arrayOf(1, 2, 3, 4, 5) 9 for (n in numbers) { 10 println(n) // Prints numbers 1 to 5 11 } 12}
In a for
loop, if you want to access the index along with the value:
Kotlin1fun main() { 2 // Our list of names 3 val names = listOf("John", "Sarah", "Jane", "Tom") 4 5 // Loop through the list withIndex() 6 for ((index, value) in names.withIndex()) { 7 println("The element at $index is $value") // Prints index and corresponding name 8 } 9 10 // Alternatively you can use .indices property to get a valid index range for array 11 for (i in names.indices) { 12 println("The element at $i is ${names[i]}") // Prints index and corresponding name 13 } 14}
Remember these tips as they'll enhance your coding efficiency:
- Don't alter the collection you're looping over within the loop.
- Variables declared within a loop only exist (or in programmer lingo, are "scoped") within the loop.
Consider this:
Kotlin1fun main() { 2 // Loop over a range of numbers 3 for (i in 1..3) { 4 val innerValue = "hello" // Declare a variable in the loop 5 } 6 println(innerValue) // Error! innerValue is out of the scope 7}
Our innerValue
is scoped inside the loop, so trying to print it outside would throw an error.
In Kotlin, loops can be written in a concise form without braces ({}
) for single statements. This is particularly useful for simple iterations:
Kotlin1for (i in 1..3) println("Loop iteration: $i") // Directly prints each iteration 2 3var outsideVar = 0 4for (i in 1..3) outsideVar = i // Updates an externally declared variable 5println("Last updated value: $outsideVar") // Correctly prints: Last updated value: 3
However, this concise form cannot be used when multiple statements are involved in the loop's body. Attempting to do so without using curly braces {}
will result in incorrect syntax or unintended behavior:
Kotlin1// Attempting multiple statements without braces - This will cause an error 2for (i in 1..3) println("Iteration: $i") val squared = i * i println("Squared: $squared")
Kotlin simplifies the creation of value ranges, offering an intuitive syntax for defining sequences of numbers or characters:
Kotlin1 1..4 // 1, 2, 3, 4 2 1 until 4 // 1, 2, 3 3 4 downTo 1 // 4, 3, 2, 1 4 0..8 step 2 // 0, 2, 4, 6, 8 5 8 downTo 0 step 2 // 8, 6, 4, 2, 0
Congratulations! You're now acquainted with for
loops in Kotlin. The upcoming practice sessions will help you sharpen your for
loop skills and reinforce your understanding. Let's dive in!