On Fri, Oct 16, 2009 at 11:09 AM, Jarkko Oranen <chous...@gmail.com> wrote: > > On Oct 16, 5:44 pm, Mark Volkmann <r.mark.volkm...@gmail.com> wrote: >> What's the rule of thumb for deciding whether a function name should >> end with an exclamation point? I thought maybe it was when the >> function modifies its first argument, but it seems there are functions >> that do that and do not have such names. >> >> For example, set-validator! and add-watch. Why don't they either both >> end with ! or both not do that. > > add-watch doesn't really affect the object itself, while set- > validator! certainly does, so I think the naming is consistent.
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. -- R. Mark Volkmann Object Computing, Inc. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---