Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Mutator chaining considered harmful

by itub (Priest)
on Jan 01, 2005 at 17:25 UTC ( #418658=note: print w/replies, xml ) Need Help??

in reply to Mutator chaining considered harmful

"Considered Harmful" Essays Considered Harmful ;-)

Seriously, there's something I find questionable. You show how chained mutators can be abused and dangerous, and the solution is "please don't" write the mutators to support this usage (unless I misunderstood and the "please don't" only applied to doing the chaining, rather that writing the mutator that way). Going back to the famous "goto considered harmful essay", that would be like saying that, since goto can be abused, languages shouldn't have a goto. While this is a nice purist position to take, decades after the essay many real-life, pragmatic language designers include goto anyway and leave the responsibility of using it wisely (if needed) to the user. I choose to do the same: I allow the mutators I write to be chained, even if in practice I only chain them in limited cases where they are really clear (in my opionion).

Of course, if you really want to return an error code from your mutators, please go ahead and be consistent. I think returning the value that was set is useless, as others have said in this thread. But if the choice is between an undefined return value and returning $self, why not return $self and let the user do whatever he or she wants with it?

  • Comment on Re: Mutator chaining considered harmful

Replies are listed 'Best First'.
Re^2: Mutator chaining considered harmful
by Aristotle (Chancellor) on Jan 01, 2005 at 19:00 UTC

    Yes, I suggested that class authors not return $self from mutators. Of course, as the discussion in multiple method calls against the same object, revisited shows, there are ways to retrofit chaining from the user's end to classes that don't implement it (I was almost going to upload one of those to CPAN).

    So I don't see a valid case for returning $self as an enabler of choice: the choice is always available, regardless of the classes interface. What's left then is the question of encouraged usage style (see the docs to SOAP::Lite). And to me, there's no question that this style should not be encouraged, just as there's no question that use of goto should not be encouraged, regardless of one or the other is sometimes the right tool or not (for which there is clear evidence in case of goto; with mutator chaining I've yet to see any).

    The only reason to favour chainable mutators I've seen anyone mention is brevity, conciseness. But as a class author you can offer that to users without conflating semantics by offering a single unified setter.

    Makeshifts last the longest.

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://418658]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (5)
As of 2022-01-20 08:43 GMT
Find Nodes?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:

    Results (56 votes). Check out past polls.