2023-10-02 01:41:38 +00:00
|
|
|
# Loops
|
|
|
|
|
|
|
|
## For loop
|
|
|
|
|
|
|
|
Braces are required.
|
|
|
|
|
|
|
|
```thp
|
2024-02-20 10:17:21 +00:00
|
|
|
val numbers = [0, 1, 2, 3]
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
for number in numbers
|
|
|
|
{
|
|
|
|
print(number)
|
|
|
|
}
|
|
|
|
|
|
|
|
for #(index, number) in numbers.entries()
|
|
|
|
{
|
|
|
|
print("{index} => {number}")
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
```thp
|
2024-03-29 00:46:23 +00:00
|
|
|
val dict = .{
|
2024-01-01 14:11:41 +00:00
|
|
|
apple: 10,
|
|
|
|
banana: 7,
|
|
|
|
cherries: 3,
|
2023-10-02 01:41:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for #(key, value) in dict
|
|
|
|
{
|
|
|
|
print("{key} => {value}")
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
```thp
|
|
|
|
for value in collection
|
|
|
|
{
|
|
|
|
if condition
|
|
|
|
{
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## While loop
|
|
|
|
|
|
|
|
```thp
|
2024-02-20 10:17:21 +00:00
|
|
|
val colors = ["red", "green", "blue"]
|
|
|
|
val mut index = 0
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
while index < colors.size()
|
|
|
|
{
|
2024-01-01 14:11:41 +00:00
|
|
|
print("{colors[index]}")
|
2023-10-02 01:41:38 +00:00
|
|
|
index += 1
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Infinite loop
|
|
|
|
|
2024-03-29 00:46:23 +00:00
|
|
|
Instead of doing `while true {}` use `loop`.
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
```thp
|
|
|
|
loop
|
|
|
|
{
|
|
|
|
print("looping")
|
|
|
|
|
|
|
|
if condition
|
|
|
|
{
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2024-03-29 00:46:23 +00:00
|
|
|
|
|
|
|
## Labelled loops
|
|
|
|
|
|
|
|
You can give labels to loops, allowing you to `break` and `continue` in nested loops.
|
|
|
|
|
|
|
|
```thp
|
|
|
|
:top for i in values_1
|
|
|
|
{
|
|
|
|
for j in values_2
|
|
|
|
{
|
|
|
|
// ...
|
|
|
|
break :top
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2023-10-02 01:41:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|