Module Dart.4 – Conditions & boucles
Objectif
Maîtriser les structures conditionnelles et les boucles Dart : if/else, for, while et leurs variantes pour contrôler le flux d'exécution efficacement.
Théorie
Conditions
if / else
Structure de base :
if (condition) {
// Code si condition vraie
}
if / else :
if (age >= 18) {
print('Majeur');
} else {
print('Mineur');
}
if / else if / else :
if (note >= 16) {
print('Très bien');
} else if (note >= 14) {
print('Bien');
} else if (note >= 12) {
print('Assez bien');
} else {
print('À améliorer');
}
Expression ternaire :
String message = age >= 18 ? 'Majeur' : 'Mineur';
// Ternaire imbriqué
String appreciation = note >= 16 ? 'Très bien'
: note >= 14 ? 'Bien'
: note >= 12 ? 'Assez bien'
: 'À améliorer';
Opérateurs de comparaison
== // Égalité
!= // Différent
> // Plus grand
< // Plus petit
>= // Plus grand ou égal
<= // Plus petit ou égal
Opérateurs logiques
&& // ET
|| // OU
! // NON
Court-circuit :
if (nom != null && nom.length > 0) {
// Si nom est null, nom.length n'est pas évalué
print(nom);
}
Boucles
for
Boucle classique avec compteur.
for (int i = 0; i < 10; i++) {
print(i);
}
Variations :
// Compter à l'envers
for (int i = 10; i > 0; i--) {
print(i);
}
// Par pas de 2
for (int i = 0; i < 10; i += 2) {
print(i); // 0, 2, 4, 6, 8
}
for-in : Parcourt les itérables
List<int> nombres = [10, 20, 30];
for (int nombre in nombres) {
print(nombre);
}
// Avec index
for (var entry in nombres.asMap().entries) {
print('${entry.key}: ${entry.value}');
}
while
Répète tant qu'une condition est vraie.
int i = 0;
while (i < 10) {
print(i);
i++;
}
Attention aux boucles infinies :
int i = 0;
while (i < 10) {
print(i);
// Oubli d'incrémenter i = boucle infinie !
}
do-while
Exécute au moins une fois, puis vérifie la condition.
int i = 0;
do {
print(i);
i++;
} while (i < 10);
Quand utiliser :
- Validation de saisie utilisateur
- Menu interactif
- Quand on veut exécuter au moins une fois
Contrôle des boucles
break
Sort de la boucle immédiatement.
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Sort de la boucle
}
print(i); // 0, 1, 2, 3, 4
}
Labels :
boucleExterne: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
break boucleExterne; // Sort des deux boucles
}
print('$i-$j');
}
}
continue
Passe à l'itération suivante.
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // Passe les nombres pairs
}
print(i); // 1, 3, 5, 7, 9
}
Méthodes de collection (alternatives aux boucles)
forEach :
nombres.forEach((n) {
print(n);
});
// Avec index
nombres.asMap().forEach((index, valeur) {
print('$index: $valeur');
});
map : Transforme chaque élément
var doubles = nombres.map((n) => n * 2).toList();
where : Filtre les éléments
var pairs = nombres.where((n) => n % 2 == 0).toList();
any / every :
bool aGrand = nombres.any((n) => n > 25);
bool tousPositifs = nombres.every((n) => n > 0);
Exercice
-
Conditions
- Créez des conditions if/else complexes
- Utilisez l'expression ternaire
- Testez les opérateurs logiques
-
Boucles for
- Parcourez un tableau avec for classique
- Utilisez for-in
- Testez les boucles imbriquées
-
Boucles while
- Créez une boucle while
- Comparez avec do-while
- Faites attention aux boucles infinies
-
Contrôle
- Utilisez break pour sortir prématurément
- Utilisez continue pour sauter des itérations
- Testez avec labels
-
Méthodes de collection
- Utilisez forEach, map, where
- Comparez avec les boucles classiques
- Choisissez la meilleure approche
Quiz
-
Que fait break dans une boucle ?
- Passe à l'itération suivante
- Sort de la boucle
- Répète l'itération
-
Quelle est la différence entre while et do-while ?
- Aucune différence
- do-while exécute au moins une fois
- while est plus rapide
-
Que fait for-in ?
- Répète plus vite
- Parcourt automatiquement une collection
- Optimise le code
-
Que fait continue ?
- Sort de la boucle
- Passe à l'itération suivante
- Répète l'itération
-
Que fait where() sur une liste ?
- Transforme les éléments
- Filtre les éléments
- Trie les éléments
Mini défi
Mission : Créer un système de traitement de données complet
Créez un script qui traite une liste d'étudiants avec leurs notes :
Données :
class Etudiant {
String nom;
List<int> notes;
Etudiant(this.nom, this.notes);
}
List<Etudiant> etudiants = [
Etudiant('Jean', [15, 18, 12, 14]),
Etudiant('Marie', [16, 17, 19, 18]),
// ...
];
Traitements :
- Calculer la moyenne de chaque étudiant
- Déterminer l'appréciation avec if/else
- Statistiques globales
- Filtres avec where()
- Affichage formaté
Critères :
- ✅ Utilisation de for et for-in
- ✅ Conditions avec if/else
- ✅ Méthodes de collection (where, map)
- ✅ Code clair et bien organisé
Objectif : Maîtriser toutes les boucles et conditions Dart pour traiter efficacement des données.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez if/else, for, while et pouvez les utiliser pour résoudre des problèmes complexes.