Skip to content
Draft

Loops

Draft provides several looping constructs for iteration.

Iterate over a range or collection:

@// Range iteration
for @i in 0..10
write(@i)
fin for.
@// Exclusive range
for @i in 0..<10
write(@i)
fin for.
@fruits = ["apple", "banana", "cherry"]
for @fruit in @fruits
write(@fruit)
fin for.
for @index, @fruit in @fruits
write(string(@index) + ": " + @fruit)
fin for.
@scores = {"Alice": 95, "Bob": 87, "Charlie": 92}
for @name, @score in @scores
write(@name + ": " + string(@score))
fin for.
for @char in "Hello"
write(@char)
fin for.

Execute while a condition is true:

mut @count = 0
while @count < 10
write(@count)
@count = @count + 1
fin while.
while true
@input = read_line()
if @input == "quit"
break
fin if.
process(@input)
fin while.

Exit the loop immediately:

for @i in 0..100
if @i == 50
break
fin if.
write(@i)
fin for.

Skip to the next iteration:

for @i in 0..10
if @i % 2 == 0
continue
fin if.
write(@i) @// Only odd numbers
fin for.

Return a value from a loop:

@result = for @i in 0..100
if @i > 50
break @i
fin if.
fin for.
@// result = 51
for @i in 0..3
for @j in 0..3
write(string(@i) + "," + string(@j))
fin for.
fin for.

Break or continue outer loops:

outer: for @i in 0..10
inner: for @j in 0..10
if @i * @j > 50
break outer
fin if.
fin for.
fin for.

Loops can return values:

@sum = for @i in 1..10
@i * @i
fin for.
@// sum = 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100 = 385

Create custom iterators:

record Counter
current: Int
max: Int
fin record.
impl Iterator for Counter
action next(@self: Counter) -> Option<Int>
if @self#current < @self#max
@value = @self#current
@self#current = @self#current + 1
return some(@value)
fin if.
return none
fin action.
fin impl.
@counter = Counter { current: 0, max: 10 }
for @value in @counter
write(@value)
fin for.
@squares = for @i in 1..10
@i * @i
fin for.
@// squares = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
@first_even = for @i in 1..100
if @i % 2 == 0
break @i
fin if.
fin for.
@// first_even = 2
@evens_squared = for @i in 1..20
if @i % 2 == 0
@i * @i
fin if.
fin for.

Learn about Objects and Enums for data structures.