[Bioperl-l] For CVS developers - potential pitfallwith"returnundef"

Sendu Bala sb at mrc-dunn.cam.ac.uk
Thu Jun 1 03:59:21 EDT 2006


Chris Fields wrote:
> 
> Sendu Bala wrote:
>> Just looking for all return undef;s isn't enough. It's entirely possible
>> to do something like:
>>
>> my $return_value;
>> {
>>    # do something that assigns to return_value on success
>>    # on failure, just do nothing
>> }
>> return $return_value;
> 
> Agreed, though looking for these is obviously much harder.  
> 
> The way to get around those is:
> 
> return $return_value if $return_value;
> return;
> 
> which I've seen used in a number of get/set methods. 

Though if anyone is using that cookie-cutter/macro style, that's much 
worse because now you can't return 0.

return $return_value if defined($return_value);
return;

In any case, it burns the eyes. I share Lincoln's POV. I also fully 
understand your point about not being able to trust the docs 
(Bio::Map::Marker...). But the solution is to change the code so they 
match the docs when the docs make sense, not change the code so that it 
no longer matches the docs[*]. In a massive OO project like bioperl the 
users need to be able to rely on the docs. You can't turn around and say 
"you've used this method for years, but now I'm changing how it works 
because you might have used the method incorrectly". Ideally any code 
changes add functionality or improve it's working without affecting code 
  that uses the method correctly according to its old docs.


* though if there isn't time/interest in changing the code, and the 
method never worked as per the docs, then by all means change the docs 
to avoid confusion - just don't change the docs on a method that worked 
according to the docs, because then you can assume people use the method 
and will be affected by the change


More information about the Bioperl-l mailing list