[fr] Pattern NULL-Object
sonntag benoit
sonntag at icps.u-strasbg.fr
Sat Oct 24 03:25:14 UTC 2009
Mildred Ki'Lya <ml.mildred593 at online.fr> a écrit :
>
> ??z{S??{?V???Z??
PS Mildred: J'ai un pb avec tes mails : "Format PGP",
je sais pas ce que s'est, mais le replay ne passe pas
bien... (résultat au-dessus)
L'idée est marrante...
Je verrai peut-être un "- import := NULL"
Bon, après, je reste assez méfiant, car pour moi,
un NULL doit planter!
Il y avait quelques années, un programmeur Lisaac avait
proposé que la valeur par défaut ne soit pas NULL,
mais le proto maître.
Ainsi, nous évitons massivement le call sur NULL...
(Je ne sais plus qui s'est...)
Mais, j'avais refusé l'idée, car elle intègre un
comportement troublant pour le programmeur et des
boucles infini rapidement faisable dans le cas de
liste chaînée par exemple.
Donc, méfiance, mais l'idée est à creuser...
J'ai aussi peur d'une allocation récursive à l'insu
du programmeur en cas de non maîtrise de la chose...
Ben.
Salut,
Je suis en cours :)
Et le prof vient de nous parler du pattern NULL-Object. Il en a parlé à
propos du refactoring, en parlant d'une mauvaise pratique qui consiste à
avoir des branches:
(object = NULL).if {
...
} else {
...
};
La solution qui est identifiée à ce problème est d'utiliser un
NULL-Object au lieu de la référence NULL. Le comportement du NULL-Object
(le contenu des méthodes) serait donc la première branche du if. Il
s'agit ici de supprimer les tests object=NULL par de la liaison dynamique.
J'ai pensé donc qu'on pouvait implémenter le NULL en lib :)
Il faudrait par contre un minimum de possibilités d'introspection (les
slots fallbacks que j'ai présenté il y a deux ans) qui permettrait à
l'object NULL (en lib) de pouvoir implémenter n'importe quel slot. Et
pour avoir le comportement par défaut (qu'on a actuellement), l'objet
NULL (en lib) fera un print_stack et un die_with_code error_code.
Mais on peux très bien imaginer des objets qui ont besoin d'un
comportement différent en cas de NULL, et on aurait alors:
Section Header
+ name := TRANSACTION;
- default := TRANSACTION_NULL
Et on aurait un object TRANSACTION_NULL qui implémenterait ce
comportement NULL.
C'est encore une idée jeune, et peut être pas bien présentée (je suis en
cours) mais j'espère que vous avez l'idée.
Mildred
More information about the Lisaac-devel
mailing list