Published by

Il y a 4 ans -

Temps de lecture 1 minute

Pépite #9 – Le nouveau switch de Java 12

L’instruction switch de Java, qui a été conçue à partir des langages C et C++, n’a pas grandement évolué avec le temps.

Java souhaitant s’enrichir du filtrage par motif dans une version future, il est devenu nécessaire de modifier notre bon vieux switch, presque irritant pour les développeurs.

Ainsi, Java 12, qui est sorti le 19 mars, embarque des nouveautés à titre expérimental :

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

Grâce à cette syntaxe, seul le code à droite du « case L -> » sera exécuté. Plus besoin de break !

De plus, beaucoup d’instructions switch sont utilisées comme expressions, comme cet exemple en Java 11 ou inférieur :

Expression switch en Java 11

int numLetters;
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        numLetters = 6;
        break;
    case TUESDAY:
        numLetters = 7;
        break;
    case THURSDAY:
    case SATURDAY:
        numLetters = 8;
        break;
    case WEDNESDAY:
        numLetters = 9;
        break;
    default:
        throw new IllegalStateException("Wat: " + day);
}

Le JDK 12 propose donc cette syntaxe, qui fait du switch une expression à part entière :

Expression switch en Java 12

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
    default                     -> throw new IllegalStateException("Wat: " + day);
};

Même si généralement on rencontre une seule expression pour chaque case, il est aussi possible de déclarer un bloc de code finissant par break (qui fonctionnera comme un return) :

int j = switch (day) {
    case MONDAY -> 0;
    case TUESDAY -> 1;
    default -> {
       int k = day.toString().length();
       int result = f(k);
       break result;
    }
};

Et si vous préférez l’ancienne syntaxe, vous pourrez toujours utiliser l’expression switch de cette manière :

int result = switch (s) {
    case "Foo":
        break 1;
    case "Bar":
        break 2;
    default:
        System.out.println("Neither Foo nor Bar, hmmm...");
        break 0;
};

Notez toutefois qu’il est impossible de combiner le case avec des flèches et l’ancienne syntaxe au sein d’un même bloc switch.

Comme écrit plus haut, ce nouveau switch n’est malheureusement disponible que de manière expérimentale, afin d’avoir des retours des développeurs basés sur une utilisation réelle.

Pour en profiter, vous devrez compiler avec l’option –enable-preview.

Published by

Commentaire

1 réponses pour " Pépite #9 – Le nouveau switch de Java 12 "

  1. Published by , Il y a 4 ans

    Sympa l’article

    ♥ Benjamin Dupin ♥

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Sapient, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.