La création d’API intuitives est une compétence très importante pour vous afin de réduire les risques de bogues et de rendre votre logiciel plus maintenable. Lorsque vous ne créez pas d’API intuitives, votre code devient sujet aux erreurs et les développeurs (vous y compris) peuvent abuser d’une API.
Voyons un exemple d’API non intuitive.
Exemple d’API non intuitive
REMARQUE : je ne dis pas qu’il s’agit d’une API mal conçue. Il s’agit d’une ancienne API qui a été construite lorsque Java ne disposait pas de fonctionnalités et de ressources pour créer des API plus intuitives.
Vous connaissez probablement le java.util.Map
interface. Seriez-vous capable de dire, sans lire la Javadoc, si la méthode suivante peut retourner null
?
Et si c’est possible, qu’est-ce que ça veut dire ? Cela signifie-t-il que la clé spécifiée n’a pas été trouvée sur la carte ? Ou cela signifie-t-il que la valeur mappée à cette clé est null
?
Comme vous pouvez le voir, il est difficile de dire ce qu’est un null
valeur signifie dans ce cas.
Si vous voulez lire la Javadoc, vous pouvez le faire ici.
Rendre votre API plus intuitive avec Optional
Pour créer des API intuitives, vous devez réduire les possibilités, éliminer les ambiguïtés et rendre les choses évidentes. Et une façon de le faire est d’utiliser Optional
lorsque null
est une valeur de retour valide.
Par exemple, au lieu de faire ce qui suit :
public String getNullableValue() {
if (someCondition()) {
return "ok";
} else {
return null;
}
}
Vous pourriez faire:
public Optional<String> getNullableValue() {
if (someCondition()) {
return Optional.of("ok");
} else {
return Optional.empty();
}
}
De cette façon, vous laissez expliciter à l’appelant que la méthode peut renvoyer un null
valeur. L’appelant n’a même pas besoin de lire la Javadoc.
De plus, le compilateur force l’appelant à gérer le null
valeur lorsqu’il essaie de l’affecter à un String
variable. Cela n’arriverait pas si la méthode pouvait revenir null
. Ainsi, l’appelant pourrait oublier de vérifier si la valeur renvoyée est ou non null
.
String value = getNullableValue().orElse("default value");
Ainsi, en plus de rendre votre API plus intuitive, Optional
rend également le code moins sujet aux erreurs.
Conclusion
Optional
est une fonctionnalité intéressante qui nous aide à écrire des API intuitives et des logiciels maintenables.
Si vous vous posez des questions sur la dégradation des performances lors de l’utilisation Optional
, j’ai écrit un article à ce sujet. Vous pouvez le trouver ici.
Si tu veux aller plus loin Optional
, vous pouvez consulter cet article qui contient plus de détails et de bonnes pratiques sur son utilisation, ou n’hésitez pas à me poser des questions.