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...