Voir le flux RSS

bouye

[Actualité] Un sondage sur le futur des Strings en Java

Noter ce billet
par , 23/02/2018 à 06h40 (9920 Affichages)
[Mise à jour le 02/03/2018]

Jim Laskey a indiqué sur son compte Twitter que les résultats du sondage sont désormais disponibles.

Source : Twitter
23/02/2018 : Jim Laskey, Director of Software Development chez Oracle vient de poster sur son compte Twitter un lien vers un sondage concernant les évolutions possibles futures des strings dans la plateforme et le langage Java.

Citation Envoyé par Jim Laskey
We're conducting a survey and your input would be appreciated. Click the button below to start the survey. Thank you for your participation!

We will publish the survey results when the survey period is complete.

surveymonkey.com/r/CJQM2VG
L’idée derrière ce sondage est de proposer un nouveau format d’écriture des String, les chaînes "brutes" (raw strings), délimitées par le caractère ` au lieu du caractère ". Ce nouveau format permettrait de saisir du texte Unicode sans devoir échapper les caractères spéciaux. Le but est bien sûr de permettre de saisir des expressions régulières ou encore des caractères Unicode de manière plus concise sans devoir doubler ou quadrupler les \ ni utiliser la notation spéciale habituelle en Java (\uxxxx).

Ainsi ce code :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
System.out.println("this".matches("\\w\\w\\w\\w"));

Deviendrait :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
System.out.println("this".matches(`\w\w\w\w`));

Il en serait également de même pour les chaînes multilignes ce qui permettrait de définir des blocs de texte sans devoir les découper en sous-chaînes et rajouter des +. Cela rendrait les blocs de code écrits en langage tiers (ex. : HTML, SQL ou JavaScript) bien plus lisibles et faciles à manipuler.

Ce qui transformerait ce code:
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    String html = "<html>\n" +
                "    <body>\n" +
                "         <p>Hello World.</p>\n" +
                "    </body>\n" +
                "</html>\n";

En :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
    String html = `<html>
                       <body>
                           <p>Hello World.</p>
                       </body>
                   </html>
                  `;

Source : Twitter

Que pensez-vous de cette nouvelle écriture des chaînes de caractères en Java ? Pour ou contre ?

Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Viadeo Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Twitter Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Google Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Facebook Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Digg Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Delicious Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog MySpace Envoyer le billet « Un sondage sur le futur des Strings en Java » dans le blog Yahoo

Mis à jour 02/03/2018 à 00h35 par bouye

Tags: java, string, unicode
Catégories
Java , Java

Commentaires

  1. Avatar de Mickael Baron
    • |
    • permalink
    Salut bouye,

    System.out.println("this".matches(`\w\w\w\w`));
    Tu n'as pas oublié des doubles quotes ici ?

    System.out.println('this'.matches(`\w\w\w\w`));
    Mickael
  2. Avatar de ZeKiD
    • |
    • permalink
    En effet, je pense que c'est plutôt une bonne idée.
    Pouvoir éviter de galérer avec les concaténations multi-lignes et les échappements de caractère me parait cohérent.
  3. Avatar de esperanto
    • |
    • permalink
    Ce nouveau format permettrait de saisir du texte Unicode sans devoir échapper les caractères spéciaux.
    Me semble-t-il que c'est déjà le cas, à condition d'utiliser le bon paramètre -encoding à la compilation. Par contre ce serait bien de pouvoir mettre, au début d'un fichier Java, une directive genre "encoding utf8" permettant justement de ne pas avoir à le préciser au compilateur (d'autant que si un fichier circule sur internet, un autre programmeur peut avoir du mal à savoir quel est son encodage)

    délimitées par le caractère ' au lieu du caractère ".
    Juste pour être sûr : c'est une simple quote (ce qui serait curieux puisqu'elle sert déjà pour délimiter un caractère unique) ou une backquote?
  4. Avatar de lvr
    • |
    • permalink
    Citation Envoyé par esperanto
    Juste pour être sûr : c'est une simple quote (ce qui serait curieux puisqu'elle sert déjà pour délimiter un caractère unique) ou une backquote?
    backquote
  5. Avatar de Derf59
    • |
    • permalink
    Quand j'écris ca (même si c'est lourd)
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        String html = "<html>\n" +
                    "    <body>\n" +
                    "         <p>Hello World.</p>\n" +
                    "    </body>\n" +
                    "</html>\n";

    Je sais exactement les espaces/tabulations

    Si on autorise ca, avec des valeurs d'indentations différentes suivant l'outils (2, 3 ou 4 espaces, utilisation de la tabulation)
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String html = `<html>
                           <body>
                               <p>Hello World.</p>
                           </body>
                       </html>
                      `;
    je n'ai aucune idée de ce que j'ai au final dans la chaine de caractères
    Mis à jour 25/02/2018 à 22h27 par bouye (Insertion de la balise [CODE])
  6. Avatar de esperanto
    • |
    • permalink
    je n'ai aucune idée de ce que j'ai au final dans la chaine de caractères
    En général on utilise ça pour incruster du code d'un autre langage (SQL, HTML, ou un langage de script) dans Java. Donc ça va être passé à un interpréteur, qui se fout de l'indentation (sauf évidemment Python ou YAML)
    Donc tu dois juste faire en sorte que ça reste lisible dans le fichier Java.
  7. Avatar de tomlev
    • |
    • permalink
    Ça existe en C# depuis longtemps (v1 je crois), sous une forme un peu différente :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        string html = @"<html>
                           <body>
                               <p>Hello World.</p>
                           </body>
                       </html>
                      ";

    Et je dois dire que c'est bien utile, notamment pour écrire des chemins de fichier Windows ou des regex.
  8. Avatar de Derf59
    • |
    • permalink
    Citation Envoyé par esperanto
    En général on utilise ça pour incruster du code d'un autre langage (SQL, HTML, ou un langage de script) dans Java. Donc ça va être passé à un interpréteur, qui se fout de l'indentation (sauf évidemment Python ou YAML)
    Donc tu dois juste faire en sorte que ça reste lisible dans le fichier Java.
    Tu t'en fous pas complètement, si tu te sers de cette chaîne comme un template pour construire un gros fichiers SQL.

    Ex : si tu tabules ton "template", que ce sont 4 caractères (ou plus jusqu'à 8 dans certains éditeurs) qui sont utilisés plutôt qu'une tabulation et qu'au final tu exécutes 10000 fois ce template
    au final tu as un fichier 4 à 8 fois plus gros en terme de taille
  9. Avatar de Seb666
    • |
    • permalink
    Citation Envoyé par Derf59
    String html = "<html>\n" +
    " <body>\n" +
    " <p>Hello World.</p>\n" +
    " </body>\n" +
    "</html>\n";
    Personnellement j'utilise plutôt des StringBuffer ou des StringBuilder pour faire ce genre de chose.

    Je trouve çà plus propre et plus rapide:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		StringBuilder strBuilder = new StringBuilder();
    		strBuilder.append("<html>\n");
    		strBuilder.append("    <body>\n");
    		strBuilder.append("         <p>Hello World.</p>\n");
    		strBuilder.append("    </body>\n");
    		strBuilder.append("</html>\n");
  10. Avatar de bouye
    • |
    • permalink
    Citation Envoyé par Mickael Baron
    Tu n'as pas oublié des doubles quotes ici ?
    Le code vient directement du sondage Mickael. De plus ici, seule l'expression régulière est une raw string, "this" est une string normale.
  11. Avatar de bouye
    • |
    • permalink
    Citation Envoyé par Seb666
    Personnellement j'utilise plutôt des StringBuffer ou des StringBuilder pour faire ce genre de chose.
    Le but ici est de rendre plus rapide la construction de HTML, de SQL ou autre. Autant j'aime bien utiliser StringBuilder autant c'est ultra-lourd.
  12. Avatar de bouye
    • |
    • permalink
    Citation Envoyé par Derf59
    Quand j'écris ca (même si c'est lourd)
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        String html = "<html>\n" +
                    "    <body>\n" +
                    "         <p>Hello World.</p>\n" +
                    "    </body>\n" +
                    "</html>\n";

    Je sais exactement les espaces/tabulations

    Si on autorise ca, avec des valeurs d'indentations différentes suivant l'outils (2, 3 ou 4 espaces, utilisation de la tabulation)
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String html = `<html>
                           <body>
                               <p>Hello World.</p>
                           </body>
                       </html>
                      `;
    je n'ai aucune idée de ce que j'ai au final dans la chaine de caractères

    Je pense que dans le cas ou on produit un fichier ou une page "live" pour lequel le poids est important qu'il faudra plutôt écrire sans indentation/tabulation :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        String html = `<html>
      <body>
        <p>Hello World.</p>
      </body>
    </html>
    `;

    Pour une interpréteur intra-VM ca n'aura probablement aucune espèce d'importance. Bref, la c'est plus de la bonne pratique qu'une limitation technique.

    A noter que la fin du sondage est plus intéressante car se rapportant aux fins de ligne. Est-ce que les retours a la ligne dans les raw strings doivent être convertis en \n ou en retour a la ligne de l'OS natif ?
  13. Avatar de bouye
    • |
    • permalink
    Citation Envoyé par esperanto
    Me semble-t-il que c'est déjà le cas, à condition d'utiliser le bon paramètre -encoding à la compilation. Par contre ce serait bien de pouvoir mettre, au début d'un fichier Java, une directive genre "encoding utf8" permettant justement de ne pas avoir à le préciser au compilateur (d'autant que si un fichier circule sur internet, un autre programmeur peut avoir du mal à savoir quel est son encodage)



    Juste pour être sûr : c'est une simple quote (ce qui serait curieux puisqu'elle sert déjà pour délimiter un caractère unique) ou une backquote?
    C'est une backquote, même si j'avais fais l'erreur de mettre une quote dans les premières minutes de publication (je fais en général pas mal de corrections au début car je zappe souvent des erreurs malgré de nombreuses relectures ). De plus j'avais initialement oublié de mettre du code extrait du sondage. C'est peut-être cette première version que tu auras vu.
  14. Avatar de Aspartame
    • |
    • permalink
    ya vraiment besoin de faire un sondage pour si peu ?
  15. Avatar de lunatix
    • |
    • permalink
    bonne idée pour les String multi lignes, par contre la backquote c'est illisible : ils devraient faire a la groovy avec triple quote '''
  16. Avatar de bouye
    • |
    • permalink
    [Mise à jour le 02/03/2018]

    Jim Laskey a indiqué sur son compte Twitter que les résultats du sondage sont désormais disponibles.

    Source : Twitter