IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Optional vs Null


Sujet :

Langage Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut Optional vs Null
    Salut tous le monde,

    Je suis entrain de terminer le livre Java 8 in action, qui decrit toutes les evolutions de la derniere version de java.

    Un des derniers chapitre concerne le moyen d eviter les "if(object != null)" qui sont parfois en abondance ou d eviter les nullPointerException en utilisant Optional.

    Selon le livre, il est plus interessant de renvoyer un object Optional plutot que null.

    Il donne un exemple de code review d un ancien code utilisant des null et propose de remplacer les variables de classe qui sont susceptible d etre null par Optional.

    Si une classe Car possede une instance Insurance alors cette variable sera declaree et initialise dans un constructeur par exemple ainsi :

    Optional<Insurance> insurance = Optional.ofNullable(insurance)

    de telle maniere a pouvoir utiliser la methode isPresent() de l object Optional pour eviter le if != null


    Ma question est la suivante : Que pensez vous de cette nouvelle approche ?
    Personnellement, je ne me voit pas utiliser/modifier une classe qui possederait beaucoup de variable pouvant etre null par un Optional. J ai l impression que cela rend le code tres lourd. Si je puis dire on s est habitue au traditionel if != null qui n est pour moi pas si affreux que cela.
    Je pense utiliser plus souvent Optional dans des cas bien precis comme par exemple la valeur retour d une methode mais cela n irait pas plus loin que cela.

    Bref, j aimerai avoir l avis des experts et des moins experts

    merci

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Salut,

    Optional<T> est une alternative à l'opérateur coalesce présent dans d'autres langages (ex : C#). Comme tu as pu le remarquer utiliser Optional<T> peut éviter les NullPointerException si on l'utilise comme valeur de retour pour faire du "function chaining" mais n'est pas conviviale si on l'utilise comme attribut ou paramètre de méthode.

    propose de remplacer les variables de classe qui sont susceptible d etre null par Optional
    Brian Goetz* dit (source) :
    You should almost never use it as a field of something or a method parameter.
    En ce qui me concerne je n'utilise pas Optional<T>, c'est le genre de feature Java 8 qu'on peut surexploiter (parce que c'est "hype") mais qui peut nuire au code si on l'utilise mal, et puis comme tu dis mis à part quelques cas très particuliers le fait de tester null c'est pas si mal.

    Tu as un article Oracle concernant ce sujet : lien.
    * Brian Goetz est un architecte du langage Java chez Oracle.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message
    mis à part quelques cas très particuliers le fait de tester null c'est pas si mal.
    J'attends avec impatience de trouver quelqu'un qui écrit ce type de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Optional<Xyz> result = monAppel();
    if (result == null)
      //...
    if (result.isPresent())
      //...
    else
      //...

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Salut tous le monde,

    Donc en gros, ne pas utiliser ce principe a tout bout de champs. On est donc bien d'accord que sur un retour de methode cela suffira amplement et n'alourdira pas le code

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    En théorie oui, mais tu sais à mon avis ils ont surtout créé ce type pour le function chaining dans l'API Stream (Java 8).
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    En même temps il s'agit d'une règle de bonne conduite a suivre : si une méthode renvoie un Optional ou prend en paramètre un Optional, cette valeur ne doit jamais être null, elle ne peut que soit contenir qq chose, soit etre Optional.empty(). Même chose pour un membre dans une classe.

    Évidement le langage ne supporte toujours pas d'outil permettant de forcer cette règle (au hasard la présence d'une annotation @NonNull ou un check forcé du code par compilateur / de l'IDE sur les usages du type Optional), donc après, on est pas a l'abri d'un programmeur pas doué ou d'une lib tierce implémentée comme ses pieds.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/08/2014, 08h38
  2. Supprimer l'option null d'un champ
    Par Oluha dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/03/2005, 16h32
  3. Réponses: 8
    Dernier message: 24/07/2003, 10h45
  4. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  5. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo