# For loops
ABS supports 2 types of for
loops: the "standard" form and
the "in" one.
# Standard form
A standard for
loop takes the canonical form:
for x = 0; x < 10; x = x + 1 {
echo("Looping...")
}
It's important to understand scoping in this form: if the loop declares an identifier that was already declared earlier, it will be "temporarely" overwritten in the loop, but will assume its original value afterwards.
Code is better than 1000 words:
x = "hello world"
for x = 0; x < 10; x = x + 1 {
# x is 0, 1, 2...
}
echo(x) # "hello world"
Similarly, a variable declared on the loop (not inside) will cease to exist after the loop is done:
for x = 0; x < 10; x = x + 1 {
# x is 0, 1, 2...
}
echo(x) # x is not defined here
Finally, variables declared inside the loop will instead keep living afterwards:
for x = 0; x < 10; x = x + 1 {
y = x
}
echo(y) # 9
# In form
The "in" form of the for
loops allows you to iterate over
an array or an hash:
for x in [1, 2, 3] {
# x is 1, 2, 3
}
for x in {"a": 1, "b": 2, "c": 3} {
# x is 1, 2, 3
}
Both key and values are available in the loop:
for k, v in [1, 2, 3] {
# k is 0, 1, 2
# v is 1, 2, 3
}
for k, v in {"a": 1, "b": 2, "c": 3} {
# k is a, b, c
# v is 1, 2, 3
}
In terms of scoping, the "in" form follows the same rules as the standard one, meaning that:
k = "hello world"
for k, v in [1, 2, 3] {
# k is 0, 1, 2
# v is 1, 2, 3
}
echo(k) # "hello world"
echo(v) # v is not defined
# break and continue
break
and continue
work just as you'd expect:
the former breaks out of a loop:
test = 0
for x = 0; x <= 10; x = x + 1 {
if x < 10 {
break
}
test += x
}
test # 0
while the later skips to the next execution of the loop:
test = 0
for x = 0; x <= 10; x = x + 1 {
if x < 10 {
continue
}
test += x
}
test # 10
# For ... else ...
For
loops can also have else
clause which executes if
the list in the for
condition is empty.
For example, when we run a database query like the following,
if the "users" list is empty, we will only execute the statements
inside the else
clause.
users = db.query("SELECT students WHERE age > 20")
for user in users {
print(user)
} else {
print("We don't have students above the age of 20")
}
← If ... else While →