36 votes

Que veut dire "canard une exception"?

Dans les Avantages des Exceptions de l'article de la Java™ tutoriels:

Une méthode peut se dérober à toutes les exceptions levées en son sein, ce qui permet une méthode plus haut dans la pile d'appel pour l'attraper.

[...]

...esquive une exception nécessite un certain effort de la part de l'intermédiaire de méthodes. Tout checked exceptions qui peuvent être levées à l'intérieur d'une méthode doit être spécifié dans ses throws de la clause.

Que signifie "canard une exception" signifie ici? J'ai cherché sur le web et FOLDOC (ligne Gratuit Dictionnaire de l'Informatique), mais n'ai pas trouver quelque chose qui avait l'air prometteur.

29voto

jmcg Points 801

Et bien, esquiver signifie simplement baisser la tête pour éviter d'être frappé ou vu. Dans ce cas, "éviter les exceptions" signifie simplement éviter que votre code soit touché par une exception.

Pour que votre méthode ne soit pas touchée par une exception, vous la jetez plus loin dans la pile des appels en déclarant une exception throws sur votre méthode.

 public void myMethod() throws IOException {

}
 

Si vous ne canardez pas, vous devez catch :

 public void myMethod() {
    try {
       // ...  

    } catch(IOException e) {
      // handle exception
    }
 

27voto

Tunaki Points 2663

Pour "le canard une exception" signifie "ne pas traiter l'exception". Cela explique d'ailleurs le nom: duck signifie "Pour se soustraire; dodge".

La méthode d'esquive de l'exception n'a tout simplement pas s'en occuper (en raison, par exemple, il n'est pas son but) et laissez l'exception être jeté à la méthode appelante.

Par exemple, considérons une méthode dont le but est de compter le nombre de lignes dans un fichier. Ce serait une mise en œuvre simple (Java 8):

private static long numberOfLines(Path path) throws IOException {
    try (BufferedReader br = Files.newBufferedReader(path)) {
        return br.lines().count();
    }
}

Notez que cette méthode ne gère pas l' IOException qui est jeté en Files.newBufferedReader(path), parce que ce n'est pas la méthode de l'objectif. Il les canards et l'appelant de gérer de manière appropriée.

Remarque l'appelant peut également canard de l'exception et de laisser ses appelant le manipuler, etc.

5voto

Nikos M. Points 171

je pense qu'une méthode peut intercepter une exception et re-jeter pour d'autres méthode de l'attraper et de les traiter en tant que de besoin. Ou juste lancer une nouvelle exception. Ou d'éviter l'interception d'une exception et laissez remonter la pile d'appel. Le point est d'avoir une méthode de déléguer la gestion des exceptions pour autre méthode qui pourrait être plus approprié pour traiter une exception (e.g en ayant accès à des données et/ou de l'état). Mais (pour java) cela oblige à déclarer les méthodes avec throws clause de tous les temps, qui devient réutilisable facilement

comme mentionné dans @jmcg commentaire, littéralement "le CANARD signifie simplement pour abaisser votre tête afin d'éviter d'être touché ou vu" (comme les canards faire dans une rivière)

1voto

Marco Points 121

Je pense que canard signifie relancer une exception ... en d'autres termes, ignorez-le en espérant que quelqu'un d'autre s'en chargera :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X