Paul Johnson wrote:

>
> > sub get_root_classes {
> >   my $self = shift;
> >
> >   my @root_classes;
> >   my @unresolved_classes;
> >
> >   foreach (keys $self->{'Classes'}) {
> >     if ($_->{'parent'}) {
> >       push $_, @unresolved_classes;
> >     } else {
> >       push $_, @root_classes;
> >     }
> >   }
> >
> >   return [EMAIL PROTECTED], [EMAIL PROTECTED];
> > }
> >
> > Feedback?  Is the above terribly mysterious about what it does?  Does it
> > really requie comments to elucidate?
>
> I think it needs something, possibly fewer syntax errors ;-)
>
> I presume this is code that you have just made up on the spot rather than
> something taken from a working project,

Well, no, [blusing deep red] but I did have to reverse the push arguments to get
it to work.

> but I couldn't say for sure what
> the Classes hash was doing.

Holding classes.  Sorry, that is a bit confusing in terms of nomenclature.
$self is a ConceptHierarchy reference, so I am pretty constantly aware of the
possible ambiguity between internal progream structure and the subject matter.

>  Here's how I would code something similar for
> myself or on a team of experienced Perl programmers.  I don't expect
> everyone to agree with everything.  In particular, I expect most people
> would be happier with an explicit return statement.
>
> sub get_class_types
> {
>     my $self = shift;
>
>     my $roots      = [];
>     my $unresolved = [];
>
>     while (my ($class, $props) = each %{$self->{classes}})
>     {
>         push @{$props->{parent} ? $unresolved : $roots}, $class;
>     }
>
>     ($roots, $unresolved)
> }

OK, you tipped the balance.  I was debating whether to make resolved and
unresolved anonymous, and whether to use the ? operator.  What I have now pretty
much looks like what you show, except that I explicitly provided the default
variable as the *second*argument to push, and did indeed make the return
statement explicit.

Joseph


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to