2.7 Functions and Control Flow
Functions in Rust are declared with fn
. They accept parameters with explicit types and can optionally return a value declared after the ->
.
2.7.1 Function Declaration
fn add(a: i32, b: i32) -> i32 { a + b } fn main() { let result = add(5, 3); println!("The sum is: {}", result); }
Key Points:
- No forward declarations are needed.
- The last expression in a function without a semicolon is the return value (or use
return <expr>;
).
2.7.2 Comparison with C
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 3);
printf("The sum is: %d\n", result);
return 0;
}
2.7.3 Control Structures
Rust provides if
, else if
, and else
for conditional code execution, as well as while
, for
, and loop
for repetitions. Unlike C, Rust’s for
iterates over iterators (ranges, collections) rather than a classic integer index expression.
If Statements
fn main() { let x = 5; if x < 0 { println!("Less than zero"); } else if x < 10 { println!("A few"); } else { println!("Many"); } }
- Conditions must be of type
bool
and need no parentheses. - Enclosing braces are mandatory for each code block.
(In C, non-zero integers are considered truthy, and parentheses around conditions are required.)
while
Loop
fn main() { let mut x = 0; while x < 5 { println!("x is: {}", x); x += 1; } }
This is similar to C’s while
loop but must use a bool
condition. break
or continue
can be used for early exit or to move to the next iteration.
for
Loop
fn main() { for i in 0..10 { println!("{}", i); } let text = "Rust"; for ch in text.chars() { println!("{}", ch); } }
0..10
creates a range from 0 to 9.- There is no C-style
for (int i = 0; …; i++)
in Rust.
loop
loop
creates an infinite loop, exited by break
, and it can optionally return a value:
fn main() { let mut count = 0; loop { println!("Count is: {}", count); count += 1; if count == 5 { break; } } }
Assignments in Conditions
Rust disallows assignments in if
conditions:
fn main() {
let mut x = 5;
// if x = 10 { } // Error: expected `bool`, found `()`
}
In contrast, C allows if (x = 10)
to assign 10 to x
and then check the non-zero value.
match
Rust also provides the match
construct for pattern matching—a more powerful variant of C’s switch statement.