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.
4 votes
Ce n'est pas la même chose que l'opérateur ? ? de C# : ? ? fusionne les nuls, c'est-à-dire
A ?? B == (A != null) ? A : B
. Cela semble évaluer une propriété sur un objet si la référence de l'objet n'est pas nulle, c'est à direA?.B == (A != null) ? A.B : null
.1 votes
@Erty : en tant que grand utilisateur de l'annotation @NotNull, qui se trouve pratiquement partout dans le code que j'écris, je ne sais plus très bien ce que sont les NPE (sauf lorsque j'utilise des API mal conçues). Pourtant, je trouve cette "notation raccourcie" mignonne et intéressante. Bien sûr, l'article a raison quand il dit : Après tout, cela n'élimine pas la racine du problème : la prolifération des valeurs nulles due à une programmation rapide et peu rigoureuse. Le terme "null" n'existe pas au niveau de l'OOA/OOD. C'est une autre absurdité Java-idiosynchrone qui peut être contournée dans la plupart des cas. Pour moi, c'est @NotNull partout.
0 votes
Jon Skeet s'est empressé de retirer sa réponse... Je me demande pourquoi ! hmmmm....
0 votes
@Karl, khachik : J'ai mis un lien vers l'article. Merci pour le rappel.
0 votes
@Erty : +1 pour avoir mentionné /. ici ;)
0 votes
PHP a ajouté quelque chose comme ceci.
0 votes
+1 @Webinator pour l'annotation @NotNull (lol - existe-t-il un utilisateur NotNull ? - ils doivent détester (ou aimer !) l'annotation NotNull qui déclenche leur boîte de réception).
0 votes
@Rup Non, en C#,
??
est un opérateur de coalescence nul, alors que?
(l'"opérateur conditionnel ternaire") permet une vérification rapide des nullités en ligne, comme l'indique OP.0 votes
@JoshM. L'OP demande
?.
qui est le opérateur conditionnel nul pas seulement?
et il n'existait pas, à ma connaissance, en C# lorsque j'ai écrit ce texte à l'époque.0 votes
@Rup -- yep, j'ai indiqué le mauvais nom pour l'opérateur, mon erreur, je faisais référence à
?
dans le cas dething?.Blah
.0 votes
C'est une des raisons pour lesquelles j'aime Ruby.
deep&.nested&.value
yvalue = var1Null || thenVar2
. mitrev.net/ruby/2015/11/13/le-opérateur-en-ruby