J’ai une méthode qui est supposé pour renvoyer un objet s’il est constaté.
Si elle n’est pas trouvé, devrait I:
- retourne la valeur null
- lever une exception
- autres
J’ai une méthode qui est supposé pour renvoyer un objet s’il est constaté.
Si elle n’est pas trouvé, devrait I:
Si vous attendez toujours de trouver une valeur puis lève l’exception si elle est manquante. L’exception signifierait qu’il y avait un problème.
Si la valeur peut être absent ou présent et les deux sont valides pour la logique d’application, puis retournent une valeur null.
Plus important : que faites-vous autres endroits dans le code ? Cohérence est important.
En règle générale, si la méthode doit toujours retourner un objet, puis allez à l’exception. Si vous anticiper la null occasionnelle et que vous voulez pour y faire face d’une certaine façon, aller avec la valeur null.
Quoi que vous fassiez, je vous déconseille fortement la troisième option : retourne une chaîne qui dit « WTF ».
Si la valeur est null jamais indique une erreur puis il suffit de retourner la valeur null.
Si la valeur null est toujours une erreur de jeter une exception.
Si la valeur null est parfois une exception alors le code à deux routines. Une routine déclenche une exception et l'autre est une valeur de type boolean test de routine qui retourne l'objet dans un paramètre de sortie et la routine renvoie false si l'objet n'a pas été trouvé.
Il est difficile de l'abus d'Essayer la routine. Il est facile d'oublier de vérifier la valeur null.
Ainsi, lorsque la valeur null est une erreur, il vous suffit d'écrire
object o = FindObject();
Lorsque la valeur null n'est pas une erreur, vous pouvez coder quelque chose comme
if (TryFindObject(out object o)
// Do something with o
else
// o was not found
Je voulais juste récapituler les options mentionnées avant, jeter quelques nouvelles:
Ou vous pouvez combiner ces options:
Fournir plusieurs versions surchargées de votre getter, de sorte que l'appelant peut décider de la voie à suivre. Dans la plupart des cas, seul le premier a une implémentation de l'algorithme de recherche, et de l'autre ceux qui viennent s'enrouler autour de la première:
Object findObjectOrNull(String key);
Object findObjectOrThrow(String key) throws SomeException;
Object findObjectOrCreate(String key, SomeClass dataNeededToCreateNewObject);
Object findObjectOrDefault(String key, Object defaultReturnValue);
Même si vous choisissez de fournir une seule application, vous pouvez utiliser une convention de nommage comme ça pour clarifier votre contrat, et il vous aide si jamais vous décidez d'ajouter d'autres implémentations.
Vous ne devez pas en abuser, mais il peut être utile, espeacially lors de l'écriture d'une Classe d'assistance qui vous permettra de l'utiliser dans des centaines d'applications différentes avec de nombreuses erreurs de manipulation des conventions.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.