Language Guide
Control Flow

Control Flow

Control flow statements allow you to control the execution path of your program.

If / Else Statements

Basic If

let age = 18;
 
if (age >= 18) {
  print("Adult");
}

If-Else

let age = 15;
 
if (age >= 18) {
  print("Adult");
} else {
  print("Minor");
}

If-Else If-Else

let age = 15;
 
if (age < 13) {
  print("Child");
} else if (age < 18) {
  print("Teenager");
} else {
  print("Adult");
}

Nested If Statements

let score = 85;
let extra_credit = true;
 
if (score >= 60) {
  if (extra_credit) {
    print("Pass with extra credit!");
  } else {
    print("Pass");
  }
} else {
  print("Fail");
}

While Loops

Execute a block of code repeatedly while a condition is true:

let i = 0;
while (i < 5) {
  print(i);
  i = i + 1;
}
// Output: 0 1 2 3 4

For Loops

Standard C-style For Loop

Flowa supports standard C-style for loops:

for (let i = 0; i < 5; i = i + 1) {
  print(i);
}
// Output: 0 1 2 3 4

For-In Loop (Iterating Arrays)

Use for-in to iterate over array elements:

let fruits = ["apple", "banana", "cherry"];
for item in fruits {
    print(item);
}
// Output: apple banana cherry

For Loop Examples

// Countdown
for (let i = 10; i > 0; i = i - 1) {
    print(i);
}
 
// Iterate with step
for (let i = 0; i < 10; i = i + 2) {
    print(i);  // 0, 2, 4, 6, 8
}
 
// Iterate over array with for-in
let numbers = [10, 20, 30];
for num in numbers {
    print(num * 2);  // 20, 40, 60
}

While Loop with Complex Condition

let count = 0;
let total = 0;
 
while (count < 10 && total < 50) {
  total = total + count;
  count = count + 1;
}
 
print("Count: " + tostring(count));
print("Total: " + tostring(total));

Infinite Loop (with Break)

let i = 0;
while (true) {
  print(i);
  i = i + 1;
 
  if (i >= 5) {
    break;
  }
}

Break Statement

Exit a loop early:

let i = 0;
while (i < 10) {
  if (i == 5) {
    break; // Exit loop when i is 5
  }
  print(i);
  i = i + 1;
}
// Output: 0 1 2 3 4

Break in Nested Loops

let i = 0;
while (i < 3) {
  let j = 0;
  while (j < 3) {
    if (j == 2) {
      break; // Only breaks inner loop
    }
    print("i=" + tostring(i) + ", j=" + tostring(j));
    j = j + 1;
  }
  i = i + 1;
}

Continue Statement

Skip the rest of the current iteration:

let i = 0;
while (i < 5) {
  i = i + 1;
 
  if (i == 3) {
    continue; // Skip when i is 3
  }
 
  print(i);
}
// Output: 1 2 4 5 (3 is skipped)

Continue with Multiple Conditions

let i = 0;
while (i < 10) {
  i = i + 1;
 
  // Skip even numbers
  if (i % 2 == 0) {
    continue;
  }
 
  print(i); // Only odd numbers printed
}
// Output: 1 3 5 7 9

Combining Break and Continue

let i = 0;
while (i < 10) {
  i = i + 1;
 
  if (i == 3) {
    continue; // Skip 3
  }
 
  if (i == 7) {
    break; // Stop at 7
  }
 
  print(i);
}
// Output: 1 2 4 5 6

Common Patterns

Iterate Over Array

let numbers = [10, 20, 30, 40, 50];
let i = 0;
 
while (i < len(numbers)) {
  print(numbers[i]);
  i = i + 1;
}

Sum Array Elements

let numbers = [1, 2, 3, 4, 5];
let sum = 0;
let i = 0;
 
while (i < len(numbers)) {
  sum = sum + numbers[i];
  i = i + 1;
}
 
print("Sum: " + tostring(sum)); // 15

Find Element in Array

let names = ["Alice", "Bob", "Charlie", "Diana"];
let search = "Charlie";
let found = false;
let i = 0;
 
while (i < len(names)) {
  if (names[i] == search) {
    found = true;
    break;
  }
  i = i + 1;
}
 
if (found) {
  print("Found " + search);
} else {
  print(search + " not found");
}

Process Until Condition

let balance = 100;
let day = 1;
 
while (balance > 0) {
  let expense = day * 5;
 
  if (expense > balance) {
    print("Insufficient funds on day " + tostring(day));
    break;
  }
 
  balance = balance - expense;
  print("Day " + tostring(day) + ": $" + tostring(balance) + " remaining");
  day = day + 1;
}

Menu Loop

let running = true;
 
while (running) {
  print("1. Option A");
  print("2. Option B");
  print("3. Exit");
 
  let choice = 3; // Simulated input
 
  if (choice == 1) {
    print("You selected Option A");
  } else if (choice == 2) {
    print("You selected Option B");
  } else if (choice == 3) {
    print("Exiting...");
    running = false;
  } else {
    print("Invalid choice");
  }
}

Logical Operators in Conditions

AND (&&)

let age = 25;
let has_license = true;
 
if (age >= 18 && has_license) {
  print("Can drive");
}

OR (||)

let is_weekend = true;
let is_holiday = false;
 
if (is_weekend || is_holiday) {
  print("Day off!");
}

NOT (!)

let is_raining = false;
 
if (!is_raining) {
  print("Good weather");
}

Complex Conditions

let age = 25;
let has_ticket = true;
let is_member = false;
 
if ((age >= 18 && has_ticket) || is_member) {
  print("Entry granted");
} else {
  print("Entry denied");
}

Guard Clauses

Use early returns to avoid deep nesting:

func process_user(user) {
    // Guard clauses
    if (user == null) {
        print("User is null");
        return;
    }
 
    if (user["age"] < 18) {
        print("User is too young");
        return;
    }
 
    if (!user["is_active"]) {
        print("User is inactive");
        return;
    }
 
    // Main logic
    print("Processing user: " + user["name"]);
}

Tips and Best Practices

Avoid Infinite Loops

// BAD - infinite loop
let i = 0;
while (i < 10) {
  print(i);
  // Forgot to increment i!
}
 
// GOOD
let i = 0;
while (i < 10) {
  print(i);
  i = i + 1;
}

Use Meaningful Conditions

// OK
if (x > 0 && x < 100) {
  // ...
}
 
// BETTER
let is_valid_percentage = x > 0 && x < 100;
if (is_valid_percentage) {
  // ...
}

Keep Conditions Simple

// Complex - hard to read
if ((a && b) || (c && d) || (e && f)) {
  // ...
}
 
// Better - break down
let condition1 = a && b;
let condition2 = c && d;
let condition3 = e && f;
 
if (condition1 || condition2 || condition3) {
  // ...
}

Examples

FizzBuzz

let i = 1;
while (i <= 20) {
  if (i % 15 == 0) {
    print("FizzBuzz");
  } else if (i % 3 == 0) {
    print("Fizz");
  } else if (i % 5 == 0) {
    print("Buzz");
  } else {
    print(i);
  }
  i = i + 1;
}

Fibonacci Sequence

let n = 10;
let a = 0;
let b = 1;
let i = 0;
 
while (i < n) {
  print(a);
  let temp = a + b;
  a = b;
  b = temp;
  i = i + 1;
}

Prime Number Checker

func is_prime(n) {
    if (n <= 1) {
        return false;
    }
 
    if (n == 2) {
        return true;
    }
 
    let i = 2;
    while (i * i <= n) {
        if (n % i == 0) {
            return false;
        }
        i = i + 1;
    }
 
    return true;
}
 
let num = 17;
if (is_prime(num)) {
    print(tostring(num) + " is prime");
} else {
    print(tostring(num) + " is not prime");
}

Next Steps

  • funcs - Learn about funcs and closures
  • funcs - Learn about funcs and closures
  • Examples - See more practical examples
  • Examples - See more practical examples