92 votes

Opérateur Java " ?" pour vérifier les nullités - Qu'est-ce que c'est ? (Pas ternaire !)

Je lisais un article lié à un article de Slashdot, et je suis tombé sur ce petit détail :

Prenez la dernière version de Java, qui essaie de rendre la vérification des pointeurs nuls plus facile en offrant une syntaxe raccourcie pour les interminables tests de pointeurs. Il suffit de d'ajouter un point d'interrogation à chaque inclut automatiquement un test test pour les pointeurs nuls, remplaçant ainsi un nid de rats des instructions if-then, telles que comme :

    public String getPostcode(Person person) {
      String ans= null;
      if (person != null) {
        Name nm= person.getName();
        if (nm!= null) {
          ans= nm.getPostcode();
        }
      }
      return ans
    } 

Avec ça :

public String getFirstName(Person person) {
      return person?.getName()?.getGivenName();
    } 

J'ai parcouru l'internet (ok, j'ai passé au moins 15 minutes à chercher des variations de "point d'interrogation java" sur Google) et je n'ai rien trouvé. Ma question est donc la suivante : existe-t-il une documentation officielle à ce sujet ? J'ai découvert que le C# possède un opérateur similaire (l'opérateur " ??"), mais j'aimerais obtenir la documentation du langage dans lequel je travaille. Ou bien, s'agit-il simplement d'une utilisation de l'opérateur ternaire que je n'ai jamais vue auparavant ?

Merci !

EDIT : Lien vers l'article : http://infoworld.com/d/developer-world/12-programming-mistakes-avoid-292

3 votes

Pourrions-nous avoir un lien vers l'article au moins ?

1 votes

Et la source de l'extrait ?

5 votes

L'article est faux. infoworld.com/print/145292 Je crois qu'un projet de pièce de monnaie a été soumis pour cela. Mais il n'a pas été sélectionné (pour les raisons mentionnées dans l'article - si vous voulez faire ce genre de choses, utilisez C# ou autre), et ne figure certainement pas dans la version actuelle du langage Java.

87voto

ataylor Points 31154

L'idée originale vient de groovy. Elle a été proposée pour Java 7 dans le cadre du projet Coin : https://wiki.openjdk.java.net/display/Coin/2009+Propositions+TOC (Elvis and Other Null-Safe Operators), mais il n'a pas encore été accepté.

L'opérateur connexe Elvis ? : a été proposé pour faire de la x ?: y un raccourci pour x != null ? x : y Cette fonction est particulièrement utile lorsque x est une expression complexe.

3 votes

En Java (où il n'y a pas d'auto-coercition vers null), un raccourci pour x!=null ? x : y

0 votes

@Michael Borgwardt : bon point, je pensais à la sémantique groovy.

0 votes

@Michael Je me suis dit qu'il fallait le tourner, mais je ne le vois toujours pas. Comment un : travailler comme une bouche ? Est-ce que ? censé représenter un volume excessif de cheveux ?

66voto

ColinD Points 48573

Cette syntaxe n'existe pas dans Java, et il n'est pas prévu de l'inclure dans les prochaines versions à ma connaissance.

9 votes

Pourquoi le downvote ? Cette réponse est 100% correcte pour autant que je sache... si vous connaissez quelque chose de différent, dites-le.

0 votes

Mais il est évident qu'à un moment donné, il a été soumis (voir les commentaires de Tom Hawtin) et sera peut-être intégré à la langue. Ainsi, un "Cette syntaxe n'existe pas mais en Java" serait plus approprié.

6 votes

@Webinator : Ce ne sera pas dans Java 7 ou 8, et il n'y a pas d'autres "versions à venir" pour le moment. Je trouve également improbable qu'elle soit intégrée, car elle encourage les mauvaises pratiques. Je ne pense pas non plus que "yet" soit nécessaire, car "does not exist in Java" n'est pas la même chose que "will never exist in Java".

19voto

PaulJWilliams Points 11641

Une proposition en ce sens a été faite dans Java 7, mais elle a été rejetée :

http://tech.puredanger.com/java7/#null

7voto

Darron Points 13196

Voir : https://blogs.oracle.com/darcy/project-coin:-the-final-five-or-so (plus précisément "Elvis et autres opérateurs de coffre-fort nul").

Le résultat est que cette fonctionnalité a été envisagée pour Java 7, mais n'a pas été incluse.

7voto

Andrzej Doyle Points 52541

En fait, c'est L'opérateur de déréférencement sûr de Groovy . Vous ne pouvez pas l'utiliser en Java pur (malheureusement), donc cet article est tout simplement faux (ou plus probablement légèrement trompeur, s'il prétend que Groovy est la "dernière version de Java").

2 votes

Donc l'article était faux - la syntaxe n'existe pas en java natif. Hmm.

0 votes

Mais le lien est cassé

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