Car le véritable but de la fonction semble être de gérer les non-null
objets par correspondance, je ferais de gérer toute la null
des contrôles dans un garde énoncé au début.
Ensuite, une fois que vous avez établi qu'aucun argument n'est - null
, vous pouvez gérer la logique réelle:
private int similarityCount(String a, String b) {
if (a == null || b == null) {
return a == b ? 1 : a == null ? 2 : 3;
}
return isMatch(a, b) ? 4 : 5;
}
C'est à la fois plus concis et plus lisible que les autres options.
Cela dit, les véritables fonctions ne serait pas généralement retourner ces codes numériques. À moins que votre méthode a été simplifié pour illustrer le problème, j'aimerais vous invite fortement à revenir sur la logique et au lieu d'écrire quelque chose de semblable à ce qui suit:
private boolean similarityCount(String a, String b) {
if (a == null || b == null) {
throw new NullPointerException();
}
return isMatch(a, b);
}
Ou:
private boolean similarityCount(String a, String b) {
if (a == null) {
throw new IllegalArgumentException("a");
}
if (b == null) {
throw new IllegalArgumentException("b");
}
return isMatch(a, b);
}
Ces approches plus classiques. Sur le revers de la médaille, ils peuvent déclencher une exception. On peut éviter cela en retournant un java.util.Optional<Boolean>
dans Java 8:
private Optional<Boolean> similarityCount(String a, String b) {
if (a == null || b == null) {
return Optional.empty();
}
return Optional.of(isMatch(a, b));
}
À première vue, cela peut sembler être pas mieux que de retourner null
mais les options sont en fait de loin supérieure.