Paris jug option

288 vues

Publié le

Le pourquoi du comment du type Optional

Publié dans : Logiciels
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Paris jug option

  1. 1. Le pourquoi du comment du type Optional. Fabrice Sznajderman Paris JUG - 2015
  2. 2. Qui vous parle? Fabrice Sznajderman Développeur Java / Scala / Web Twitter : @fsznajderman Github : fabszn Paris JUG - 2015
  3. 3. Paris JUG - 2015 /** * I promise the following service will never return a NULL reference */ Contact c = cs.getContactById(1); System.out.println(“Age =” + c.getAge());
  4. 4. Paris JUG - 2015 NullPointerException /** * I promise the following service will never return a NULL reference */ Contact c = cs.getContactById(1); System.out.println(“Age =” + c.getAge()); ...
  5. 5. Paris JUG - 2015 /** * I promise the following service will never return a NULL reference */ Contact c = cs.getContactById(1); if (c != null) { System.out.println(“Age =” + c.getAge()); } ...
  6. 6. Paris JUG - 2015 /** * I promise the following service will never return a NULL reference */ Contact c = cs.getContactById(1); if (c != null) { System.out.println(“Age =” + c.getAge()); } ...
  7. 7. Type Optional: Un peu de théorie... ‘Optional est un type permettant de caractériser la présence ou l’absence de valeur’ Paris JUG - 2015 contact présence absence
  8. 8. Type Optional: Un peu de théorie... Contact c1 = null; Contact c2 = new Contact("Hari","kovair",34); Optional<Contact> o1 = Optional.ofNullable(c1); Optional<Contact> o2 = Optional.of(c2); System.out.println("o1 = " + o1); System.out.println("o2 = " + o2); Paris JUG - 2015
  9. 9. Type Optional: Un peu de théorie... Contact c1 = null; Contact c2 = new Contact("Hari","kovair",34); Optional<Contact> o1 = Optional.ofNullable(c1); Optional<Contact> o2 = Optional.of(c2); System.out.println("o1 = " + o1); System.out.println("o2 = " + o2); Paris JUG - 2015 o1 = Optional.empty o2 = Optional[model.Contact@54bedef2]
  10. 10. Type Optional: Un peu de théorie... ‘Une monade est comme une boite, vide ou ayant un contenu, qui nous fournit des opérations au dessus de la valeur éventuellement encapsulée.’ Paris JUG - 2015 contact ou .map() .orElse() .get() .filter() ... Optional
  11. 11. Type Optional : Cas pratiques Live coding... Paris JUG - 2015
  12. 12. Type Optional : Conclusion ● C’est bon pour l’environnement! ● Disparition du pattern if-null ● Documentation automatique ● Disponible dans d’autres langages Paris JUG - 2015
  13. 13. final Optional<Questions> qs = getQuestions(); qs.map( q → ”Answers : ” + q.answers ).orElse(“Merci de votre attention!”) Paris JUG - 2015

×