Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 1 livre papier acheté 
= la version en ligne automatiquement offerte. Cliquez ici
  1. Livres et vidéos
  2. C# 12 et Visual Studio Code
  3. Algorithmique
Extrait - C# 12 et Visual Studio Code Les fondamentaux du langage
Extraits du livre
C# 12 et Visual Studio Code Les fondamentaux du langage Revenir à la page d'achat du livre

Algorithmique

Bases de l’algorithmique

Jusqu’à présent, nous nous sommes contentés de développer des applications n’incluant aucune « logique » : elles se limitaient à afficher des données. Il n’y avait aucune notion de condition, de répétition ni même de logique de code. En effet, le code d’une application est souvent complexe et les embranchements sont multiples en fonction de diverses conditions. Dans ce chapitre, nous allons découvrir la logique algorithmique, qui vous permettra de créer du code ressemblant davantage à celui que nous pouvons retrouver dans les applications répondant à des problématiques plus complexes.

1. La logique conditionnelle

Indéniablement, il s’agit ici d’une brique que vous allez utiliser de façon systématique. Une condition implique l’exécution ou non d’une partie du code en fonction de l’évaluation d’un test logique.

a. Test simple : le if/else

La logique conditionnelle se traduit en pseudocode de la façon suivante :

 
SI une condition ALORS 
  Je fais quelque chose 
SINON 
  Je fais autre chose 

En C#, les mots-clés pour réaliser une instruction conditionnelle sont if et else :

if(condition) 
{ 
    .... 
} 
else 
{ 
    .... 
} 

La condition testée par une instruction if doit renvoyer un booléen. Ce dernier peut être stocké dans une variable mais il est également possible que l’instruction if évalue directement la condition, sans variable intermédiaire.

Si nous reprenons l’exemple de la fin du chapitre précédent, nous pourrions améliorer notre classe Voiture pour rajouter un booléen qui indique si l’instance de la voiture est fonctionnelle. Si la valeur est égale à « oui », il est inutile de réparer la voiture. Cependant, si la voiture n’est pas fonctionnelle, il faut la réparer :

public class Voiture 
{ 
    public bool Fonctionnelle { get; set; } 
    ... 
} 
public class Garage 
{ ...

Gestion des erreurs

Nous avons évoqué plusieurs fois dans l’ouvrage les erreurs qui pourraient survenir lorsque le code s’exécute. Il est temps de les nommer : il s’agit d’exceptions. Une exception est une erreur rencontrée à l’exécution. Elle peut être non prévue (du fait d’un bug) ou volontairement planifiée. Étudions tout d’abord ce qu’est une exception.

1. Concept d’une exception

Comme indiqué ci-dessus, une exception est une instance d’une classe spéciale qui représente une erreur à l’exécution. Mais pour que cette erreur soit exploitable, il est nécessaire qu’elle véhicule deux informations :

  • Le type d’erreur

  • Des informations sur l’erreur

Le langage C# étant fortement typé, nous utilisons le type de la classe de l’exception pour transmettre l’information du type d’erreur. Par exemple, une des exceptions les plus courantes est NullReferenceException, issue de la classe du même nom. Cette exception véhicule le type d’erreur suivant : il y a eu une tentative d’accès à une donnée sur un objet qui n’a pas été affecté (qui est égal à null).

D’autre part, une exception étant une instance d’une classe, il est possible d’y ajouter des informations par le biais de propriétés. Cependant, une classe d’exception doit obligatoirement hériter de la classe du framework .NET Exception afin que soit possible l’utilisation de tout le mécanisme de gestion d’erreurs du framework.

Par exemple, pour créer son exception personnalisée, il faut écrire le code suivant :

public class MonException : Exception { } 

Par défaut, la classe de base Exception met à disposition plusieurs propriétés pouvant être exploitées. Celles qui sont le plus couramment utilisées sont les suivantes :

  • Message, qui contient le message textuel automatiquement généré par le framework ou ajouté par le développeur (c’est souvent le premier paramètre du constructeur d’une exception).

  • InnerException, qui contient une éventuelle exception interne...