Journal Java perdra une partie de sa verbosité à la fin de l’hiver

Posté par  . Licence CC By‑SA.
Étiquettes :
7
26
nov.
2019

Il y a quelque semaines paraissait la version 13 du langage avec des nouveautés sympathiques mais qui ne cassaient pas trois pattes à un canard_/° =.
La prochaine version prévue pour la fin de l’hiver s’annonce nettement plus étoffée avec pas moins de 13 JEP au moment d’écrire ces lignes.

Records

On pourra trouver les Records qui permettront d’encapsuler de manière immutable de la donnée en une ligne.

record Moule(String pseudo, Tribune tribune){}

Les accesseurs, equals, hashCode et toString n’ont pas besoin d’être précisés car le langage se débrouille tout seul. Il n’est pas interdit d’ajouter des méthodes pour éviter de construire un objet invalide, par exemple.

Le début de commencement du Pattern Matching

Alors que le filtrage par motif existe en Scala, Clojure, Groovy et Kotlin soit les principaux autres langage fonctionnant sur la JVM, il fait enfin son apparition en Java. Pour le moment ça reste timide puisqu’il est limité à la méthode instanceof. Dans les versions suivantes il sera disponible à d’autres endroits. En Java 14, il sera possible d’écrire :

String formatted = "unknown";
if (obj instanceof Integer i) {
    formatted = String.format("int %d", i);
}
else if (obj instanceof Byte b) {
    formatted = String.format("byte %d", b);
}
else if (obj instanceof Long l) {
    formatted = String.format("long %d", l);
}
else if (obj instanceof Double d) {
    formatted = String.format("double %f", d);
}
else if (obj instanceof String s) {
    formatted = String.format("String %s", s);
}

Ça ne reste pas bien folichon mais ce qui est prévu c’est de pouvoir écrire :

String formatted = 
    switch (obj) {
        case Integer i -> String.format("int %d", i)
        case Byte b    -> String.format("byte %d", b);
        case Long l    -> String.format("long %d", l); 
        case Double d  -> String.format("double %f", d); 
        case String s  -> String.format("String %s", s); 
        default        -> obj.toString();
    };

Avec ces deux nouveautés, j’ai l’impression que Lombok va pouvoir se rhabiller.

Et vous dans la liste des nouveautés, qu’est-ce qui vous fait envie à part tester le dernier framework JavaScript à la mode ou rester sur Kotlin ?

  • # Les texts blocks

    Posté par  (site Web personnel) . Évalué à 4. Dernière modification le 26/11/19 à 20:28.

    Et vous dans la liste des nouveautés, qu’est-ce qui vous fait envie

    Bon en vrai j'utilise pas spécialement Java mais je dirais les "text blocks", comme le reste c'est pas une killer feature qu'on a jamais vue ailleurs mais c'est le genre de trucs qui rend vraiment moins pénible de manipuler du texte et qui mérite à mon avis d'être mentionné.

    • [^] # Re: Les texts blocks

      Posté par  . Évalué à 2.

      Je plussoie, c'est quelque chose que j'apprécie beaucoup en Elixir, et que j'aurais aimé avoir en Java quand c'était mon langage de travail.

      • [^] # Re: Les texts blocks

        Posté par  . Évalué à 2.

        Je vois assez peu l'usage que j'en aurais mis à part dans certains tests. Je rate quelque chose ?

  • # Les développeurs java

    Posté par  . Évalué à -10.

    Un rien les fait bander et je me demande s'ils n'ont pas confondu les grains de café avec les bonbons au viagra :)

  • # Tout se perd

    Posté par  (site Web personnel) . Évalué à 1.

    Si en plus on nous enlève des raisons de troller…

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

  • # Preview

    Posté par  . Évalué à 5. Dernière modification le 27/11/19 à 06:56.

    Fait gaffe les 2 nouveautés dont tu parle sont en preview ce qui signifie qu'elles peuvent évoluer de manière non rétro compatibles dès java 15.

    L'API pour accéder aux NVM. Ça a l'air sympa à utiliser ce genre de mémoire.

  • # envie de gros paquets

    Posté par  (site Web personnel) . Évalué à 6.

    La possibilité de packager une application sous forme d'installeur (msi, dmg, rpm, deb) avec le jdk intégré https://openjdk.java.net/jeps/343 serait un vrai plus. C'est possible aujourd'hui, mais il faut bidouiller.

    Incubez l'excellence sur https://linuxfr.org/board/

  • # mouais

    Posté par  . Évalué à 3.

    • Y a toujours pas de patron pouvant s'appliquer uniformément aux objets… Dans notre code c'est pas trop grave, on gère avec des interfaces, mais dès qu'on sort de notre production et qu'il faut interagir avec le reste de l'écosystème on se retrouve obligé de faire du copier / coller tout moche (ou passer les méthodes 'utiles', en paramètre (mais ça reste moche).
    • pas de Collection const qui pètent à la compil; au mieux on a les immutable qui plantent à l'exécution.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: mouais

      Posté par  (site Web personnel) . Évalué à 2. Dernière modification le 27/11/19 à 14:06.

      Y a toujours pas de patron pouvant s'appliquer uniformément aux objets… Dans notre code c'est pas trop grave, on gère avec des interfaces, mais dès qu'on sort de notre production et qu'il faut interagir avec le reste de l'écosystème on se retrouve obligé de faire du copier / coller tout moche (ou passer les méthodes 'utiles', en paramètre (mais ça reste moche).

      C’est-à-dire, tu voudrais des mixins ?

      • [^] # Re: mouais

        Posté par  . Évalué à 2.

        Yep sauf que c'est sur des objet dont on ne maitrise pas forcément la création…

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Records

    Posté par  (site Web personnel) . Évalué à 3.

    Tiens marrant, Python 3.7 a ajouté la même feature : PEP 557—Data Classes. Cette PEP n'était pas non plus un grosse nouveauté, il existait déjà le module attrs sur PyPI qui faisait la même chose depuis longtemps. Sauf que là c'est une version allégée (restreinte) qui a été ajouté à la bibliothèque standard.

    Comme quoi, il n'y pas pas que Java qui souffre de la "verbosité" de la programmation orientée objet :-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.