[Bioperl-l] bioperl API conventions

Chris Fields cjfields at uiuc.edu
Fri Mar 3 17:19:00 EST 2006


> -----Original Message-----
> From: bioperl-l-bounces at lists.open-bio.org [mailto:bioperl-l-
> bounces at lists.open-bio.org] On Behalf Of Rutger Vos
> Sent: Friday, March 03, 2006 3:48 PM
> To: bioperl list
> Subject: [Bioperl-l] bioperl API conventions
> 
> Hi all,
> 
> I've noticed that many bioperl objects don't separate getters from
> setters, e.g.:
> 
> my $branchlength = $node->branchlength; # now it's a getter
> $node->branchlength($branchlength); # now it's a setter
> 
> Is this approach carved in stone? Or could one contribute objects to the
> project that do:
> 
> my $branchlength = $node->get_branchlength;
> $node->set_branchlength($branchlength);
> 
> To me (and, apparently, to Damian Conway, see "perl best practices" :)
> the latter approach is better, as it takes away some ambiguity,
> especially w.r.t setting false-but-defined values (bugs could emerge
> where arguments are erroneously tested for truth rather than
> definedness) and resetting fields to undef.
 
Careful, don't open up that can of worms.  There was talk of this in the
mail list archives.  These threads cover much of the discussion; to get the
gist, trace back to the beginning and read through.  The second thread is
more fun:

http://portal.open-bio.org/pipermail/bioperl-l/2003-January/010863.html

http://portal.open-bio.org/pipermail/bioperl-l/2003-December/014374.html

The last one is from around the time bioperl 1.4 was released.  I believe it
is enforced somewhat but not religiously.  I know AUTOLOAD is not supposed
to be in code but I have seen it in core (Bio::Tools::Run::StandAloneBlast
has it, I believe).  I believe it has more to do with having similar methods
in all the modules, and AUTOLOAD is avoided b/c explicit get/setters make
understanding code a lot easier.  I personally am looking forward to seeing
how everybody here deals with Pugs/Perl6 (yet another can of worms); OOP in
Perl6 looks quite different from Perl5!

> Also, is it okay to have separate getters and setters in your own
> objects, but implement interfaces that do the combined get/setter thing
> using aliasing?
> 
> Thanks,
> 
> Rutger
> 
> --
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> Rutger Vos, PhD. candidate
> Department of Biological Sciences
> Simon Fraser University
> 8888 University Drive
> Burnaby, BC, V5A1S6
> Phone: 604-291-5625
> Fax: 604-291-3496
> Personal site: http://www.sfu.ca/~rvosa
> FAB* lab: http://www.sfu.ca/~fabstar
> Bio::Phylo: http://search.cpan.org/~rvosa/Bio-Phylo/
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> 
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l



Christopher Fields
Postdoctoral Researcher - Switzer Lab
Dept. of Biochemistry
University of Illinois Urbana-Champaign




More information about the Bioperl-l mailing list