3.4 KiB
3.4 KiB
Exemples / DO-DON'T — Chapitre 19 — Contrôle de flux
Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
Exemples actuellement présents dans le chapitre
Exemple 1
if (condition) {
action();
} elseif (otherCondition) {
otherAction();
} else {
fallback();
}
Exemple 2
int32 result = if (x > 10) {
emit 1;
} elseif (x > 5) {
emit 2;
} else {
emit 3;
};
Exemple 3
Option<uint32> result = if (condition) {
emit Option::Some(42);
} else {
emit Option::None;
};
Exemple 4
match (value) {
pattern1 => {
statements;
}
pattern2 => {
statements;
}
_ => {
statements;
}
}
Exemple 5
literal pattern
enum variant pattern
tuple pattern
struct pattern
typed binding pattern
wildcard _
alternative pattern avec |
nested pattern
Range pattern si et seulement si le Range est valide selon les règles de Range
Exemple 6
1 | 2 | 3 => {
...
}
Exemple 7
A(uint32 value) | B(uint32 value) => {
use(value);
}
Exemple 8
Color::Red => {
...
}
Exemple 9
Result::Ok(uint32 value) => {
use(value);
}
Result::Err(Error error) => {
handle(error);
}
Exemple 10
Result::Ok(_) => {
...
}
Exemple 11
(0, 0) => {
origin();
}
(int32 x, 0) => {
horizontal(x);
}
(int32 x, int32 y) => {
other(x, y);
}
Exemple 12
Point {
x: 0,
y: int32 vertical
} => {
use(vertical);
}
Exemple 13
Point {
x: 0,
y: _
}
Exemple 14
SomeEnum::PointValue(
Point {
x: 0,
y: int32 y
}
) => {
use(y);
}
Exemple 15
int32 result = match (value) {
0 => {
emit 10;
}
_ => {
emit 20;
}
};
Exemple 16
int32 result;
result = if (condition) {
emit 1;
} else {
emit 2;
};
Exemple 17
return V1 requis
break V1 requis
continue V1 requis
yield réservé pour generators/coroutines si non finalisé en V1
Exemple 18
while (condition) {
...
}
dowhile (condition) {
...
}
for (initialization; condition; update) {
...
}
foreach (Type item in iterable) {
...
}
Exemple 19
dowhile (condition) {
statements;
}
Exemple 20
for (;;) {
...
}
Exemple 21
while (true) {
...
}
Exemple 22
for (i = 0, j = 5; i < x || j < y; i += 1, j += 1) {
...
}
Exemple 23
foreach (Type item in iterable) {
...
}
Exemple 24
until (...) -> utiliser while (!...)
repeat ... until -> utiliser dowhile (!...)
unless (...) -> utiliser if (!...)
loop { ... } -> utiliser while (true) { ... }
Exemple 25
;
;;
foo();;
Exemple 26
foo(first, second, third); // valide
foo(first, second, third,); // invalide
DO / DON'T / WHY / compiler error / edge cases
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration 0.2.12 conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.