Control Flow
Control flow statements allow you to control the execution order of your code.
Boolean convertible types
The following types can be used as a condition
Always
false
falsewhen 0
⚠️ Any other type will throw a runtime error!
Conditional Statements
if Statement
The if statement executes a block of code if the specified condition is true.
if (condition) {
// Block of code
}
else Statement
The else statement executes a block of code if the condition in the if statement is false.
if (condition) {
// Block of code if condition is true
} else {
// Block of code if condition is false
}
else if Statement
The else if statement is used to specify multiple conditions.
if (condition1) {
// Block of code if condition1 is true
} else if (condition2) {
// Block of code if condition2 is true
} else {
// Block of code if no conditions are true
}
Loops
for Loop
The for loop repeats a block of code a specific number of times, based on the condition provided.
for (let i = 0; i < 10; i++) {
// Block of code to repeat
}
ranged-for
The ranged-for loop iterates over an iterable type (string, array)
const arr = [1,2,3];
for(const element : arr) {
//repeat 3 times
}
while Loop
The while loop executes a block of code as long as the specified condition is true.
while (condition) {
// Block of code to repeat
}
repeat Loop
The repeat loop executes a block of code forever.
repeat {
// Block of code to repeat
}
repeat...while Loop
The repeat...while loop executes a block of code once, and then repeats it as long as the specified condition is true.
repeat {
// Block of code to repeat
} while(condition);
match Statement
The match statement provides conditional branching similar to switch in other languages, but with clearer and safer semantics:
- No fallthrough: Only one matching case is executed.
- Scoped cases: Each
caseintroduces a new block scope. - Optional
default: Runs when no other case matches.
match (expression) {
case value1:
// code for value1
case value2:
// code for value2
default:
// code if no case matches
}
- Values are compared using strict equality (
===). - Each
caseblock is isolated; variables declared inside do not leak outside.
Control Flow with break and continue
break
The break statement exits a loop or switch statement early, skipping any remaining iterations.
for (let i = 0; i < 10; i++) {
if (i === 5) {
break; // Exits the loop when i equals 5
}
console.log(i);
}
continue
The continue statement skips the current iteration of a loop and proceeds to the next iteration.
for (let i = 0; i < 10; i++) {
if (i === 5) {
continue; // Skips the iteration when i equals 5
}
console.log(i);
}
Conditional Shortcuts
Varjus supports conditional shortcut evaluation with logical operators.
||(OR): If the left-hand side is truthy, the right-hand side is not evaluated.&&(AND): If the left-hand side is falsy, the right-hand side is not evaluated.
const a = true || someFunction(); // someFunction is not called
const b = false && otherFunction(); // otherFunction is not called
This behavior can be useful for fallback values or guarding expressions.