[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