By private email, James Anderson pointed out that accessors are traceable, whereas SLOT-VALUE is not. To me, that is the most convincing argument for always using accessors, even in class-internal initialization code.
Thanks for all your input! -Hans On Tue, Nov 16, 2010 at 11:05 AM, Hans Hübner <[email protected]> wrote: > Hi, > > The company I work for has a Common Lisp style guide that generally > disallows using SLOT-VALUE. Instead, accessor should be used so that: > BEFORE and :AFTER methods are always invoked when accessing a slot. > Generally, I think this is a good idea when looking at classes and instances > from the outside. Slots should be considered as being an implementation > detail, and users (i.e. client code and derived class methods) should not > make assumptions about how functionality is implemented. > > Now, I often have the need for class instances that are constant in some > respect, i.e. some properties of the instance that are implemented using > slots can't directly be changed. I often declare such slots havin only a: > READER in the class definition, which makes the read-only nature of this > slot apparent right away. > > Of course, such slots need to be initialized somehow. An :INITARG sometimes > does the trick, but it is more common that the value of such slots is > calculated and recalculated during the lifetime of the instance, and as such > the slot's value must be set. > > Now, from the perspective of seeing the class declaration as documenting the > visible behavior of instances of a class, it does not seem to be proper to > declare an accessor to be used in class-internal code so that the slot's > value can be updated. Instead, I think that it is better to use SLOT-VALUE > to mess with the guts of an instance from code that is part of the guts > itself. > > Of course, one may want to argue that DEFCLASS forms should not be > considered to be an interface definition. Instead, one could call for a > series of DEFGENERIC forms to define the external interface of some "module" > and make class definitions be internal. From a more practical perspective, > though, class definitions in CL serve both as interface and implementation > definition, thus it seems to be appropriate using the mechanisms provided by > CLOS to support both uses. > > How do others use or avoid SLOT-VALUE? Is it frowned upon in your company's > or project's (verbal) style guide? > > Thanks for your input, > Hans > _______________________________________________ pro mailing list [email protected] http://common-lisp.net/cgi-bin/mailman/listinfo/pro
