in reply to Re: (Re:)+ $class = ref $class || $class
in thread Constructor/Factory Orthodoxy
writing Packet_Foreign->new means that I have a priori knowledge that I always need a Packet_Foreign thingy. That is not the situation in the scenario at hand.
That was the scenario with the code I posted. We seem to keep referring to different scenarios and aspects of the issue. I am focused on the unclear use of $obj->new in place of Obj->new and that that muddies the meaning of $obj->new in most situations. You seem to point to $obj->new as an equivalent to (ref $obj)-new.
All I've got out of your arguments is that you wish to save five keystrokes per call, ()ref, and spend more text in the documentation of the code instead. That seems ridiculous.
It is not reasonable to attribute use of the offending idiom to "mindless imitation".
It is reasonable to consider it as a possibility. I am of fair intelligence
and have admitted to repeatedly doing so myself. If you followed the links I
gave, you will see others confessing also. tye comes to mind offhand.
Copying the practices given by Wall, Christiansen and Schwartz is not a bad
approach to learning Perl, but it is rote learning and so the label
mindless imitation may apply. The writer of $obj->new
does not see any reason to distinguish his code from the code of Cargo
Cultists, so the reader won't know if it is Cargo Cult Code without doing
extra work. The writer of ref $class || $class abets this
practice.
You may have specific intent regarding the meaning of $obj->new but the poor use of the idiom means I have to be clued in by you to know your specific usage pattern and then track who is writing a piece of code. Given that you, and I, are doing so poorly in making our positions clear to one another just reinforces my feeling that the code should be as clear and informative as possible.
In the absence of compelling reasons I'll choose to avoid creating confusion over creating it and then attempting to mitigate the confusion.
I see colors and shades of grey also. Here I find no blending of shades. I have given a clear reason to habitually avoid $obj->new. You have just stated or referenced personal preferences, I don't find a reason for your preference in your posts.
Here in two lines of code the problem can be seen.
$obj->new; # Perhaps Obj->new could have been written $obj->method; # method is wrong, what class do # we start looking in to fix it?
More generally, what do you expect to happen if you call a class method as an object method?
This very discussion demonstrates that this is not a valid question for
Perl. Perl has functions and methods. I think of methods being called with
a first argument that specifies the class of the method and may have other
uses in the method. Perl makes no meaningful distinction
between class and instance methods, it is just a bit of syntax. (ref $obj)->routine( $obj) and $obj->routine contain pass the same info.
As developer of the module?
In this discussion I have been more in the role of maintainer/evolutionary
expander of the client code using the classes containing the new.
As user of the module?
I hope that all the arguments are checked for validity as possible. The first argument of method just happens to set on the other side of a method's name.
I don't see your questions as relevant to the issue at hand. For me it is about clarity, as in locality of information, not about following the object-orientation style of Smalltalk or Self or C++ or ...
It is interesting that our minds find differing aspects of this discussion
as being worthy of expansion. My thoughts run toward variations of
How to treat comments when reading or reviewing code?
Sorry -- Would have got back sooner but for network and server problems.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^15: $class = ref $class || $class (not me)
by tye (Sage) on Mar 06, 2003 at 00:14 UTC | |
by rir (Vicar) on Mar 06, 2003 at 06:25 UTC | |
by tye (Sage) on Mar 06, 2003 at 07:06 UTC | |
by rir (Vicar) on Mar 06, 2003 at 17:28 UTC | |
|
Re: (Re:)+ $class = ref $class || $class
by herveus (Prior) on Mar 05, 2003 at 18:49 UTC | |
by rir (Vicar) on Mar 05, 2003 at 22:19 UTC | |
|
(Re:)+ $class = ref $class || $class
by dragonchild (Archbishop) on Mar 04, 2003 at 22:48 UTC |