Instructions et boucles if C#  : didacticiel de logique conditionnelle

Ce didacticiel explique comment écrire du code C# qui examine des variables et modifie le chemin d’exécution en fonction de ces variables. Vous allez écrire un code en C# et afficher les résultats de la compilation et de l’exécution du code. Ce tutoriel comporte une série de leçons visant à explorer les constructions de type branches et boucles en C#. Ces leçons présentent les concepts de base du langage C#.

Conseil

Pour coller un extrait de code dans le mode focus, vous devez utiliser le raccourci clavier (Ctrl + v ou cmd + v).

Prérequis

Le tutoriel suppose que vous avez un ordinateur configuré pour le développement local. Consultez Configurer votre environnement local pour obtenir des instructions d’installation et une vue d’ensemble du développement d’applications dans .NET.

Si vous préférez exécuter le code sans avoir à configurer un environnement local, consultez la version interactive de ce didacticiel dans le navigateur.

Prendre des décisions à l’aide de l’instruction if

Créez un répertoire nommé branches-tutorial. Indiquez le répertoire actuel et exécutez la commande suivante :

dotnet new console -n BranchesAndLoops -o .

Important

Les modèles C# pour .NET 6 utilisent des instructions de niveau supérieur. Votre application ne correspond peut-être pas au code de cet article, si vous avez déjà effectué une mise à niveau vers .NET 6. Pour plus d’informations, consultez l’article Les nouveaux modèles C# génèrent des instructions de niveau supérieur.

Le SDK .NET 6 ajoute également un ensemble de directives implicitesglobal using pour les projets qui utilisent les kits SDK suivants :

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Ces directives implicites global using incluent les espaces de noms les plus courants pour le type de projet.

Pour plus d’informations, consultez l’article sur les directives d’utilisation implicite

Cette commande crée une nouvelle application console .NET dans le répertoire actuel. Ouvrez Program.cs dans votre éditeur favori, puis remplacez les contenus par le code qui suit :

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

Essayez ce code en tapant dotnet run dans la fenêtre de console. Le message « la réponse est supérieure à 10 » doit s’afficher sur votre console. Modifiez la déclaration de b pour que la somme soit inférieure à 10 :

int b = 3;

Tapez dotnet run à nouveau. La réponse étant inférieure à 10, rien ne s’affiche. La condition que vous testez a une valeur false. Vous n’avez pas de code à exécuter, car vous avez uniquement écrit l’une des branches possibles pour une instruction if : la branche true.

Conseil

Durant votre exploration de C# (ou de tout autre langage de programmation), vous commettrez des erreurs d’écriture du code. Le compilateur détectera et signalera les erreurs. Observez attentivement la sortie d’erreur et le code ayant généré l’erreur. L’erreur du compilateur peut en général vous aider à trouver le problème.

Le premier exemple montre la puissance de l’instruction if et des types booléens. Un booléen est une variable qui peut avoir l’une des deux valeurs suivantes : true ou false. C# définit un type spécial, bool, pour les variables booléennes. L’instruction if vérifie la valeur d’un bool. Quand la valeur est true, l’instruction qui suit if s’exécute. Autrement, il est ignoré. Ce processus de vérification des conditions et d’exécution des instructions en fonction de ces conditions est performant.

Utiliser if et else ensemble

Pour exécuter un code différent dans les branches true et false, vous créez une branche else qui s’exécute quand la condition a une valeur false. Essayez une branche else. Ajoutez les deux dernières lignes dans le code ci-dessous (vous devriez déjà avoir les quatre premières lignes) :

int a = 5;
int b = 3;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10");
else
    Console.WriteLine("The answer is not greater than 10");

L’instruction qui suit le mot clé else s’exécute uniquement quand la condition testée a une valeur false. La combinaison de if et else avec des conditions booléennes offre les hautes performances dont vous avez besoin pour traiter une condition true et une condition false.

Important

La mise en retrait sous les instructions if et else a simplement pour but de faciliter la lecture. Le langage C# ne considère pas la mise en retrait ou les espaces blancs comme des éléments significatifs. L’instruction qui suit le mot clé if ou else sera exécutée en fonction de la condition. Tous les exemples de ce tutoriel suivent une pratique courante qui consiste à mettre en retrait les lignes en fonction du flux de contrôle des instructions.

Étant donné que la mise en retrait n’est pas significative, vous devez utiliser { et } pour indiquer quand vous souhaitez inclure plus d’une instruction dans le bloc qui s’exécute de manière conditionnelle. Les programmeurs C# utilisent généralement les accolades pour toutes les clauses if et else. L’exemple suivant est identique à celui que vous avez créé. Modifiez votre code ci-dessus pour qu’il corresponde au code suivant :

int a = 5;
int b = 3;
if (a + b > 10)
{
    Console.WriteLine("The answer is greater than 10");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
}

Conseil

Dans le reste de ce didacticiel, tous les exemples de code incluent les accolades, conformément aux pratiques acceptées.

Vous pouvez tester des conditions plus complexes. Ajoutez le code suivant après le code que avez écrit jusque-là :

int c = 4;
if ((a + b + c > 10) && (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("And the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("Or the first number is not equal to the second");
}

Le symbole == teste l’égalité. == se distingue du test d’égalité d’attribution, que nous avons vu avec a = 5.

&& représente « et ». Cela signifie que les deux conditions doivent être true pour que l’instruction s’exécute dans la branche true. Ces exemples montrent également que vous pouvez avoir plusieurs instructions dans chaque branche conditionnelle, à condition de les mettre entre { et }. Vous pouvez également utiliser || pour représenter « ou ». Ajoutez le code suivant après ce que vous avez écrit jusque-là :

if ((a + b + c > 10) || (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("Or the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("And the first number is not equal to the second");
}

Modifiez les valeurs de a, b et c et passez de && à || et inversement. Vous comprendrez mieux comment fonctionnent les opérateurs && et ||.

Vous avez terminé la première étape. Avant de passer à la section suivante, déplaçons le code actuel dans une méthode distincte. Cela nous permettra de travailler plus facilement avec un nouvel exemple. Placez le code existant dans une méthode appelée ExploreIf(). Appelez-le à partir du haut de votre programme. Une fois ces modifications terminées, votre code doit ressembler à ce qui suit :

ExploreIf();

void ExploreIf()
{
    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }

    int c = 4;
    if ((a + b + c > 10) && (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

Commentez l’appel à ExploreIf(). La sortie est ainsi moins encombrée lorsque vous travaillez dans cette section :

//ExploreIf();

// démarre un commentaire dans C#. Les commentaires correspondent à du texte que vous voulez conserver dans votre code source sans l’exécuter en tant que code. Le compilateur ne génère aucun code exécutable à partir des commentaires.

Utiliser des boucles pour répéter des opérations

Dans cette section, vous utilisez des boucles pour répéter des instructions. Ajoutez ce code après l’appel à ExploreIf :

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

L’instruction while vérifie une condition et exécute l’instruction ou le bloc d’instructions qui suit while. Elle répète la vérification de la condition, exécutant ces instructions jusqu'à ce que la condition soit false.

Cet exemple contient un nouvel opérateur. ++ après la variable counter est l’opérateur d’incrémentation. Il ajoute 1 à la valeur de counter et stocke cette valeur dans la variable de counter.

Important

Assurez-vous que la condition de boucle while devient false quand vous exécutez le code. Dans le cas contraire, vous allez créer une boucle infinie dans laquelle votre programme ne se terminera jamais. Ceci n’est pas démontré dans cet exemple, car vous devez forcer la fermeture de votre programme avec CTRL-C ou à l’aide d’autres moyens.

La boucle while teste la condition avant d’exécuter le code qui suit while. La boucle do ... while exécute d’abord le code, puis vérifie la condition. La boucle do while est illustrée dans l’exemple de code suivant :

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

Cette boucle do et la boucle antérieure while produisent la même sortie.

Utiliser la boucle for

La boucle for est couramment utilisée dans C#. Exécutez le code suivant :

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

Ce code précédent fonctionne de manière identique à lawhile boucle et à lado boucle que vous avez déjà utilisées. L’instruction for comprend trois parties qui contrôlent son fonctionnement.

La première partie est l’initialiseur for : int index = 0; déclare que index est la variable de boucle et définit sa valeur initiale sur 0.

La partie centrale est la condition for : index < 10 déclare que cette boucle for continue à s’exécuter tant que la valeur de compteur est inférieure à 10.

La dernière partie est l’itérateur for : index++ indique comment modifier la variable de boucle après l’exécution du bloc qui suit l’instruction for. Il spécifie ici que index doit être incrémenté de 1 chaque fois que le bloc s’exécute.

Essayez vous-même. Essayez chacune des variantes suivantes :

  • Modifiez l’initialiseur pour définir le démarrage à une valeur différente.
  • Modifiez la condition pour définir l’arrêt à une valeur différente.

Une fois terminé, vous allez vous-même écrire des codes pour mettre en pratique ce que vous avez appris.

Il existe une autre instruction de bouclage qui n’est pas abordée dans ce tutoriel : l’instruction foreach. L’instruction foreach répète son instruction pour chaque élément d’une séquence d’éléments. Il est le plus souvent utilisé avec des collections, c’est pourquoi il est abordé dans le didacticiel suivant.

Création de boucles imbriquées

Une boucle while, doou for peut être imbriquée dans une autre boucle pour créer une matrice à l’aide de la combinaison de chaque élément de la boucle externe avec chaque élément de la boucle interne. Faisons cela pour créer un ensemble de paires alphanumériques afin de représenter des lignes et des colonnes.

Une boucle for peut générer les lignes :

for (int row = 1; row < 11; row++)
{
    Console.WriteLine($"The row is {row}");
}

Une autre boucle peut générer les colonnes :

for (char column = 'a'; column < 'k'; column++)
{
    Console.WriteLine($"The column is {column}");
}

Vous pouvez imbriquer une boucle à l’intérieur de l’autre pour former des paires :

for (int row = 1; row < 11; row++)
{
    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The cell is ({row}, {column})");
    }
}

Vous pouvez voir que la boucle externe s’incrémente une fois pour chaque exécution complète de la boucle interne. Inversez l’imbrication des lignes et des colonnes et observez les modifications. Lorsque vous avez terminé, placez le code de cette section dans une méthode appelée ExploreLoops().

Combiner des branches et des boucles

Maintenant que vous avez vu l’instruction if et la création de boucles en langage C#, vérifiez si vous pouvez écrire un code C# pour obtenir la somme de tous les entiers de 1 à 20 divisibles par 3. Voici quelques conseils :

  • L’opérateur % vous donne le reste d’une opération de division.
  • L’instruction if vous donne la condition pour vérifier si un nombre doit être inclus dans la somme.
  • La boucle for peut vous aider à répéter une série d’étapes pour tous les nombres de 1 à 20.

Essayez par vous-même et vérifiez le résultat. Vous devriez obtenir 63 comme réponse. Vous pouvez voir une réponse possible en consultant le code terminé sur GitHub.

Vous avez terminé le didacticiel « Branches et boucles ».

Vous pouvez passer au tutoriel Tableaux et collections dans votre propre environnement de développement.

Pour en savoir plus sur ces concepts, consultez les articles :