Exceptions en français

Introduction aux Exceptions

En C++, les exceptions représentent la manière dont un ordinateur réagit à un problème survenant pendant l'exécution du code d'un programme. Lorsqu'une situation indésirable se produit, le système génère une exception. Si le code n'intègre pas un mécanisme pour gérer cette exception, le programme cessera alors de fonctionner en raison de l'erreur rencontrée.

Gestion des Exceptions

Pour capturer une exception, nous pouvons utiliser un bloc try. Ce bloc entoure le code susceptible de provoquer une erreur, et un ou plusieurs blocs catch sont utilisés pour traiter les exceptions lorsque celles-ci se produisent. Voici une amélioration de l'exemple initial :

#include 
#include 
using namespace std;

void getString(int index) {
    if (index < 0 || index >= 10) {
        throw std::length_error("Index hors des limites autorisées.");
    }
}

int main() {
    try {
        getString(11);
    } catch (std::length_error& e) {
        cout << "Erreur : " << e.what() << endl;
    } catch (...) {
        cout << "Erreur inconnue." << endl;
    }
}

Dans cet exemple, le bloc catch est capable de traiter une erreur spécifique, ici std::length_error. En utilisant la syntaxe catch (std::length_error& e), nous avons également accès à l'objet d'erreur qui nous permet d'afficher le message d'erreur associé.

Lancer une Exception

Disons que nous voulons provoquer une erreur lorsque l'utilisateur saisit un nombre négatif. La fonction sqrt() de la bibliothèque math.h ne renvoie pas une erreur mais un résultat nan (not a number) dans ce cas. Nous pouvons créer une fonction personnalisée, mySqrt(), qui lancera une exception si un nombre négatif est passé en paramètre. Voici comment cela pourrait être réalisé :

#include 
#include 
#include 
using namespace std;

double mySqrt(double value) {
    if (value < 0) {
        throw std::runtime_error("Les nombres négatifs ne sont pas autorisés.");
    }
    return sqrt(value);
}

int main() {
    try {
        double result = mySqrt(-4);
        cout << "La racine carrée de -4 est : " << result << endl;
    } catch (runtime_error& e) {
        cout << "Erreur : " << e.what() << endl;
    }
}

Dans cet exemple, si un nombre négatif est passé à mySqrt(), une exception sera lancée, ce qui nous permet de la traiter dès que cela se produit, plutôt que d'avoir à gérer des valeurs nan.

Conclusion

Les exceptions sont un concept essentiel en C++ qui permettent de rendre votre programme plus robuste et réactif face aux erreurs. En intégrant des blocs try et catch, vous pouvez gérer les problèmes de manière contrôlée, ce qui améliore l’expérience utilisateur en évitant les arrêts brutaux du programme.

Applications Pratiques

Comprendre et maîtriser les exceptions est crucial, surtout si vous souhaitez développer un site web ou une startup. Par exemple, lors de la création de formulaires en ligne, vous pouvez utiliser ce concept pour valider les entrées des utilisateurs. Si un utilisateur soumet un formulaire avec des données invalide ou inattendues, vous pouvez lever une exception et afficher un message d'erreur approprié. Cela contribue à garantir que votre application soit à la fois fonctionnelle et conviviale.