mirror of https://git.sr.ht/~garritfra/sabre
Garrit Franke
3 years ago
8 changed files with 109 additions and 0 deletions
@ -0,0 +1,76 @@
|
||||
# Control Flow |
||||
|
||||
Deciding whether or not to run some code depending on if a condition is true and deciding to run some code repeatedly while a condition is true are basic building blocks in most programming languages. The most common constructs that let you control the flow of execution of Sabre code are `if` expressions and loops. |
||||
|
||||
## `if` Expressions |
||||
|
||||
An `if` expression allows you to branch your code depending on conditions. You provide a condition and then state, "If this condition is met, run this block of code. If the condition is not met, do not run this block of code." |
||||
|
||||
Here is a basic example of an `if` expression: |
||||
|
||||
``` |
||||
fn main() { |
||||
let number = 3 |
||||
|
||||
if number < 5 { |
||||
println("condition was true") |
||||
} else { |
||||
println("condition was false") |
||||
} |
||||
} |
||||
``` |
||||
|
||||
All `if` Statements start with the keyword `if`, followed by a condition. In this case, the condition checks if the number has a value less than 5. The block of code we want to execute if the condition is true is placed immediately after the condition inside curly braces. |
||||
|
||||
Optionally, we can also include an `else` expression, which we chose to do here, to give the program an alternative block of code to execute should the condition evaluate to false. If you don’t provide an `else` expression and the condition is false, the program will just skip the `if` block and move on to the next bit of code. |
||||
|
||||
Try running this code; You should see the following output: |
||||
|
||||
``` |
||||
$ sabre run main.sb |
||||
condition was true |
||||
``` |
||||
|
||||
Let’s try changing the value of `number` to a value that makes the condition false to see what happens: |
||||
|
||||
``` |
||||
let number = 7 |
||||
``` |
||||
|
||||
Run the program again, and look at the output: |
||||
|
||||
``` |
||||
$ sabre run main.sb |
||||
condition was false |
||||
``` |
||||
|
||||
> **Note**: It's worth noting that the condition in this code must be a bool. At the current state of the project, this is not the case, but it is subject to change at any time. **TODO**: Discuss this behavior. |
||||
|
||||
### Handling multiple conditions with `else if` |
||||
|
||||
You can have multiple conditions by combining `if` and `else` in an `else if` expression. For example: |
||||
|
||||
``` |
||||
fn main() { |
||||
let number = 6 |
||||
|
||||
if number % 4 == 0 { |
||||
println("number is divisible by 4") |
||||
} else if number % 3 == 0 { |
||||
println("number is divisible by 3") |
||||
} else if number % 2 == 0 { |
||||
println("number is divisible by 2") |
||||
} else { |
||||
println("number is not divisible by 4, 3, or 2") |
||||
} |
||||
} |
||||
``` |
||||
|
||||
This program has four possible paths it can take. After running it, you should see the following output: |
||||
|
||||
``` |
||||
$ sabre run main.sb |
||||
number is divisible by 3 |
||||
``` |
||||
|
||||
When this program executes, it checks each `if` expression in turn and executes the first body for which the condition holds true. Note that even though 6 is divisible by 2, we don’t see the output `number is divisible by 2`, nor do we see the `number is not divisible by 4, 3, or 2` text from the else block. That’s because Sabre only executes the block for the first true condition, and once it finds one, it doesn’t even check the rest. |
@ -0,0 +1,9 @@
|
||||
fn main() { |
||||
let number = 3 |
||||
|
||||
if number < 5 { |
||||
println("condition was true") |
||||
} else { |
||||
println("condition was false") |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fn main() { |
||||
let number = 6 |
||||
|
||||
if number % 4 == 0 { |
||||
println("number is divisible by 4") |
||||
} else if number % 3 == 0 { |
||||
println("number is divisible by 3") |
||||
} else if number % 2 == 0 { |
||||
println("number is divisible by 2") |
||||
} else { |
||||
println("number is not divisible by 4, 3, or 2") |
||||
} |
||||
} |
Loading…
Reference in new issue