in reply to Re^2: [perl6] Complex Attribute Validation and/or Triggers (good OO)
in thread [perl6] Complex Attribute Validation and/or Triggers

if there truly is no way of doing it with attributes, it makes me a bit sad

My comment had nothing to do with whether or not anything is possible in Perl 6.

it makes using perl6 public attributes "dangerous"

Duh. Yeah, public attributes are a bad idea.

Even if you manage to make $i.lb = 6; fatal when 4 == $i.ub, then users of your object are likely to do:

$i.lb = 6; $i.ub = 7;

and have it die half-way through.

OO in the style of "a bag of attributes with wrappers around setters (types, 'before's, etc.)" is just a terrible (anti-modular) approach to OO (despite it being extremely common).

- tye        

Replies are listed 'Best First'.
Re^4: [perl6] Complex Attribute Validation and/or Triggers (anti-modular)
by raiph (Deacon) on Mar 09, 2015 at 04:13 UTC
    I almost didn't post in this thread precisely because the initial #perl6 reaction was "what tye said" (referencing your initial just-write-a-method response). I'm pretty sure they'd say the same of this follow up, but I'll add :

    public attributes are a bad idea

    Indeed. There are no public (or even protected) attributes in Perl 6 OO, only private. Code that uses objects, and even sub, super, and trusted classes, has to go thru method accessors.

    Update Fwiw, on reviewing this thread I'm pretty sure I missed tye's point. I'm right that Perl 6 doesn't have "public attributes" using Perl 6 vocabulary. But (I think) tye meant that even public accessor methods are generally a bad idea (no matter what language one is using).