For example, set-validator! and add-watch. Why don't they either both
end with ! or both not do that.
--
R. Mark Volkmann
Object Computing, Inc.
Am 16.10.2009 um 18:09 schrieb Jarkko Oranen:
> add-watch doesn't really affect the object itself, while set-
> validator! certainly does, so I think the naming is consistent.
> I think it might be a good rule of thumb to add the ! if the operation
> either mutates the object (set!) or invalidates old values/references
> to it, like persistent! or set-validator!. However, even core.clj
> doesn't seem to follow this...
>
> The exceptions seem to be the "alter" operations for reference types;
> alter, commute, alter-var-root, and for some reason, ref-set.
I also use ! for functions, which modify resources. Eg. creating a
database table or such.
Sincerely
Meikel
set-validator! sets the validator field in the object, so that's a modification.
add-watch replaces the watches map in the object with a new map
containing the new watch function, so that's a modification.
You could say there's a difference because validators can prevent
future changes to an object whereas watchers are just notified.
> I think it might be a good rule of thumb to add the ! if the operation
> either mutates the object (set!) or invalidates old values/references
> to it, like persistent! or set-validator!. However, even core.clj
> doesn't seem to follow this...
>
> The exceptions seem to be the "alter" operations for reference types;
> alter, commute, alter-var-root, and for some reason, ref-set.
So the situation seems to be that the presence of ! in a name
indicates something, but the lack of it doesn't necessarily mean
anything.