[Bioperl-l] attribute setting and return value
Steve Chervitz
sac@bioperl.org
Fri, 27 Sep 2002 12:04:23 -0700 (PDT)
This is yet another "gotcha" that arises from having combined set/get
accessors. It's convenient sure, but not so clean from an engineering point of
view since it relies on a shared convention.
I can't say I've never done anything with the return value from a set
operation, but I don't normally rely on it. So IMHO, I'd recommend declaring
that, unless it's explicitly documented in the method's POD, the return value
from a set operation on a combined accessor is not specified and should not be
used by the faint of heart.
Steve
--- Hilmar Lapp <hlapp@gnf.org> wrote:
> While I tried to investigate a test failure in Lincoln's BioGraphics
> I noticed a somewhat important style difference between bioperl and
> Lincoln's:
>
> When we set an attribute, we always return the value that was just set:
>
> sub my_attribute{
> my ($self,$value) = @_;
> $self->{'attrkey'} = $value if defined $value;
> return $self->{'attrkey'};
> }
>
> In Lincoln's style, the _previous_ value is returned (which in many
> cases will be undef!):
>
> sub my_attribute{
> my ($self,$value) = @_;
> my $v = $self->{'attrkey'};
> $self->{'attrkey'} = $value if defined $value;
> return $v;
> }
>
> Lincoln, I'm just second-guessing that after having seen this in
> multiple getter/setters, that it is probably your preferred style.
> If this is confined to only a few or one module, then my point is
> almost moot (but maybe still worth mentioning).
>
> These styles are inconsistent with each other, and if an interface
> is implemented in different styles (which is the case for e.g.
> Bio::SeqFeatureI in Bio::SeqFeature::* and Bio::Graphics::*), the
> returned values will not be the same, and also not comply with the
> interface definition.
>
> It is going to be very hard to change this all over bioperl ... (I
> guess it also hard to change this all over Bio::Graphics ...) (I
> certainly do not want to rate the merits of one against the other
> here -- to me both styles make a lot of sense)
>
> I don't think that anyone takes advantage yet of using the returned
> value when setting an attribute (speak out if you do). Maybe the
> sensible thing to do in order to prevent future havoc is to advise
> people not to rely on the returned value when setting an attribute.
>
> Lincoln/Ewan/Jason/Heikki, any thoughts on this or votes?
>
> -hilmar
>
> --
> -------------------------------------------------------------
> Hilmar Lapp email: lapp at gnf.org
> GNF, San Diego, Ca. 92121 phone: +1-858-812-1757
> -------------------------------------------------------------
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l@bioperl.org
> http://bioperl.org/mailman/listinfo/bioperl-l
=====
Steve Chervitz
sac@bioperl.org
__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com