Le filtrage de motifs
instanceof avec variable, switch sur les types, motifs d'enregistrement et gardes.
Le filtrage de motifs : en finir avec instanceof et le transtypage
Toute base de code Java 8 contient cette séquence, souvent plusieurs centaines de fois : un instanceof, une accolade, un transtypage vers le type qu'on vient de tester, une variable locale nommée à la va-vite. Trois lignes pour une seule idée. La répétition est mécanique, donc elle n'attire pas l'attention, et c'est précisément pour cela qu'elle est dangereuse : le jour où l'on copie-colle la branche Cercle pour écrire la branche Rectangle et qu'on oublie de changer le transtypage, on obtient un ClassCastException à l'exécution sur un code que la relecture avait validé.
Le filtrage de motifs supprime la redondance en fusionnant le test et l'extraction. Vous ne dites plus « si c'est un cercle, alors traite-le comme un cercle » ; vous dites « si cette valeur a la forme d'un cercle de rayon r ». Le transtypage disparaît du code source, donc l'erreur de transtypage disparaît de vos possibilités. Combiné aux enregistrements et aux classes scellées vues précédemment, le mécanisme va plus loin : il permet au compilateur de refuser un traitement incomplet.
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion