2008-09-19 4 views
0

Serait-il utile de pouvoir fournir une valeur de retour de méthode pour les objets NULL?Serait-il utile d'avoir des valeurs de retour de méthode pour les objets NULL?

Pour une liste des valeurs nulles de retour pourraient être:

get(int) : null 
size() : 0 
iterator() : empty iterator 

qui permettrait le code suivant qui a des contrôles moins nuls. Ceci ne serait utilisé que si la classe ou l'interface le définissait et qu'une vérification nulle continuerait à fonctionner. Parfois, vous ne voulez pas faire des vérifications nuls donc il semble qu'il pourrait être bénéfique d'avoir cela comme une option.

De: http://jamesjava.blogspot.com/2007/05/method-return-values-for-null-objects.html

+0

idée connexe de Stephen Colebourne: http: // www.jroller.com/scolebourne/entry/java_7_null_default_and –

Répondre

0

C'est une bonne idée.

Smalltalk fait cela.

Il existe un objet NULL. Il ne descend pas à partir de l'objet. (Smalltalk est une hiérarchie de classe à racine unique comme Java)

Pour l'étudiant avancé, vous pouvez le sous-classer pour faire des procurations!

0

Ruby fait cela (ainsi que d'autres). Il a zéro à la place de null et c'est un objet.

Je déteste quand les fonctions destinées à renvoyer des listes peuvent renvoyer une valeur nulle. Il est préférable de renvoyer une liste vide et de laisser l'utilisateur décider s'il veut vérifier null (vide) ou non.

+0

Qu'est-ce qui est bien? Parce que nil est un objet, est assez facile à implémenter le modèle nul. Il suffit de mettre la méthode sur un objet nul. :-) – marcospereira

3

Il est agréable de ne pas avoir à vérifier la valeur NULL, et certaines langues facilitent la tâche - p. Les types non-NULLable de C#, ou Haskell qui n'a pas de valeurs NULL mais peut exprimer une valeur manquante avec le constructeur de type Maybe.

Une valeur NULL est distincte d'une liste vide. Vous pouvez prendre le point de vue que quelqu'un passant dans une NULL où vous avez besoin d'une liste fait une erreur de programmation, et que la bonne chose à faire est de lancer une exception NullPointerException. L'excuse typique pour accepter les valeurs NULL est qu'il y a souvent un cas où vous n'avez pas besoin de la liste, et vous ne devriez pas avoir à créer une nouvelle liste vide, surtout quand il y a des soucis d'efficacité. Vous pouvez avoir beaucoup d'avantages sans changer la langue, mais en ayant à la place une EmptyList statique que les gens peuvent transmettre, cela n'a jamais besoin d'être réinitialisé.

0

En C# (parmi d'autres langues), ceci n'est normalement pas autorisé. Sans une instance de Foo, .net ne sait pas appeler la méthode de Foo ou la méthode de l'enfant de Foo.

Cependant, une méthode d'extension C# 3.0 appliqué au type Foo permettrait ceci:

Foo x = null; 
if (x.Bar() == 0) 
{ 
    Console.WriteLine("I win"); 
} 

Bar pourrait être construit comme ceci:

public static int Bar (this Foo theFoo) 
{ 
    return theFoo == null ? 0 : 1; 
} 
Questions connexes