X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=22cef8e555d859c71e0ceec4a9b99d002de5d6d2;hb=b8e08963464459d4f6dd8ccb03f74bf17813273f;hp=973b8258e0dda8540169e302fc89dc72abbe7abe;hpb=86178e0ffcf4959d0a172395daa66421137fb2fe;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index 973b825..22cef8e 100644 --- a/moose-class/slides/index.html +++ b/moose-class/slides/index.html @@ -52,7 +52,7 @@ img#me05 {top: 43px;left: 36px;}

Introduction to Moose

-

git://git.moose.perl.org/moose-presentations.git

+

Dave Rolsky

@@ -71,7 +71,8 @@ img#me05 {top: 43px;left: 36px;}
@@ -218,7 +219,7 @@ use Moose; @@ -300,8 +301,8 @@ has blog_uri => ( handles => { 'blog_host' => 'host' }, ); -$person->blog_host; -# really calls $person->blog_uri->host +$person->blog_host; +# really calls $person->blog_uri->host
@@ -892,7 +893,7 @@ use Moose;

BUILDARGS

@@ -1039,6 +1041,7 @@ extends 'LWP'; @@ -1066,6 +1069,7 @@ use Moose;
  • Mostly like $self->SUPER::work(@_)
  • But cannot change @_!
  • Binds the parent's method at compile time
  • +
  • Parent determined by checking Child->meta()->superclasses()
  • @@ -1106,8 +1110,7 @@ has first_name => ( is => 'ro' ); my $person = Person->new( first_name => 'Dave' ); -$person->first_name('Stevan'); -print $person->first_name; # Dave +$person->first_name('Stevan'); # dies @@ -1126,7 +1129,7 @@ print $person->first_name; # Dave use Moose; # true -Person->can('extends'); +Person->can('extends'); + + +
    +

    Basic Attributes Summary

    + +
    -

    What is a Method Modifier

    +

    What Are Method Modifiers For?

    @@ -2372,7 +2347,7 @@ after clear_password => sub { $self->$orig( $self->_munge_insert(@_) ); - $new_user->_assign_uri; + $new_user->_assign_uri; return $new_user; }; @@ -2436,6 +2411,7 @@ around run => sub { @@ -2444,19 +2420,21 @@ around run => sub {

    Augment and Inner

    -
    package Document;
    +  
    package Document;
     
     sub xml { '<doc>' . inner() . '</doc>' }
     
     package Report;
     extends 'Document';
     augment xml =>
    -    sub { title() . inner() . summary() };
    +    sub { my $self = shift;
    +          $self->title() . inner() . $self->summary() };
     
     package TPSReport;
     extends 'Report';
     augment xml =>
    -    sub { tps_xml() . inner() };
    + sub { my $self = shift; + $self->tps_xml() . inner() };
    @@ -2578,11 +2556,11 @@ Item Undef Defined Value - Str - Num - Int - ClassName - RoleName + Str + Num + Int + ClassName + RoleName
    @@ -2600,7 +2578,7 @@ Item CodeRef RegexpRef GlobRef - FileHandle + FileHandle Object @@ -2732,9 +2710,11 @@ has start_date => (

    Subtype Shortcuts - class_type

    use Moose::Util::TypeConstraints;
    -class_type 'DateTime';
    +class_type 'DateTime';
    + +
    -subtype 'DateTime', +
    subtype     'DateTime',
         as      'Object',
         where   { $_->isa('DateTime') },
         message { ... };
    @@ -2744,10 +2724,12 @@ subtype 'DateTime',

    Subtype Shortcuts - role_type

    use Moose::Util::TypeConstraints;
    -role_type 'Printable';
    +role_type 'Printable';
    -subtype 'Printable', - as 'Object', +
    + +
    subtype 'Printable',
    +    as  'Object',
         where
             { Moose::Util::does_role(
                   $_, 'Printable' ) },
    @@ -2758,9 +2740,11 @@ subtype 'Printable',
       

    Subtype Shortcuts - duck_type

    use Moose::Util::TypeConstraints;
    -duck_type Car => qw( run break_down );
    +duck_type Car => qw( run break_down );
    + +
    -subtype 'Car', +
    subtype 'Car',
         as      'Object',
         where   { all { $_->can($_) }
                   qw( run break_down ) },
    @@ -2771,12 +2755,14 @@ subtype 'Car',
       

    Subtype Shortcuts - enum

    use Moose::Util::TypeConstraints;
    -enum Color => qw( red blue green ) );
    +enum Color => qw( red blue green );
    -my %ok = map { $_ => 1 } +
    + +
    my %ok = map { $_ => 1 }
                  qw( red blue green );
     
    -subtype 'Color'
    +subtype     'Color'
         as      'Str',
         where   { $ok{$_} },
         message { ... };
    @@ -2892,6 +2878,19 @@ no Moose;
    +

    Questions So Far?

    +
    + +
    +

    Exercises

    + +
    # cd exercises
    +# perl bin/prove -lv t/05-types.t
    +
    +Iterate til this passes all its tests
    +
    + +

    Typed Methods (Low-tech)

    package Person;
    @@ -3022,9 +3021,9 @@ coerce ArrayOfInt
     
     use MyApp::Types qw( ArrayOfInt );
     
    -has transaction_history => (
    -    is  => 'rw',
    -    isa => ArrayOfInt,
    +has transaction_history => (
    +    is  => 'rw',
    +    isa => ArrayOfInt,
     );
    @@ -3034,7 +3033,7 @@ has transaction_history => (
    • Type names are exported functions, catches typos early
    • Types must be pre-declared
    • -
    • Types are stored with namespaces internally, but externally are short
    • +
    • Types are stored with namespaces internally, but you use short names
    • Import existing Moose types as functions from MooseX::Types::Moose
    • Still need string names for things like ArrayRef['Email::Address']
    @@ -3047,7 +3046,7 @@ has transaction_history => (
  • Catches typos at compile time
  • Automatic namespacing
  • One more thing to install and learn
  • -
  • Every name gets types twice (declared and then defined)
  • +
  • Every name is typed twice (declared and then defined)
  • Still stuck with strings when referring to class or role names
  • Coercion gotcha from earlier still applies to types exported from MooseX::Types::Moose
  • @@ -3068,15 +3067,6 @@ has transaction_history => (

    Questions?

    -
    -

    Exercises

    - -
    # cd exercises
    -# perl bin/prove -lv t/05-types.t
    -
    -Iterate til this passes all its tests
    -
    -

    Part 6: Advanced Attributes

    @@ -3174,7 +3164,7 @@ $alice->friend($bob);
    after salary_level => {
         my $self = shift;
    -    return unless @_;
    +    return unless @_;
         $self->clear_salary;
     };
    @@ -3186,11 +3176,22 @@ $alice->friend($bob);
    has salary_level => (
         is      => 'rw',
    -    trigger => sub { $_[0]->clear_salary },
    +    trigger =>
    +        sub { $_[0]->clear_salary },
     );
    +

    Trigger Arguments

    + + +
    + +

    Delegation

    @@ -3369,7 +3371,7 @@ has history => ( use Moose; has _favorite_numbers => ( traits => [ 'Array' ], - is => 'ro', + is => 'bare', isa => 'ArrayRef[Int]', default => sub { [] }, init_arg => undef, @@ -3407,7 +3409,7 @@ print "$_\n"
  • Bool - set, toggle, ...
  • Hash - get, set, ...
  • Array - already saw it
  • -
  • Code - execute, that's it
  • +
  • Code - execute and execute_method
  • @@ -3472,7 +3474,7 @@ $person->account->deposit(100);

    Traits and Metaclasses

    @@ -3530,15 +3532,12 @@ print Person->meta
  • Use weak_ref to avoid circular references
  • Use trigger to do an action post-attribute write
  • Use delegations to hide "internal" objects
  • +
  • Use native delegations to treat Perl types as objects
  • Traits and metaclasses let you extend Moose's core attribute features
  • -

    Questions?

    -
    - -

    Exercises

    # cd exercises
    @@ -3548,12 +3547,20 @@ print Person->meta
     Iterate til this passes all its tests
    -
    -

    Part 7: Introspection

    +
    +

    CYOA

    + +

    + If there is time, keep going ... +

    + +

    + Otherwise, jump to slide 269 ... +

    -

    Part 8: A Brief Tour of MooseX

    +

    Bonus: A Brief Tour of MooseX

    @@ -3561,7 +3568,7 @@ Iterate til this passes all its tests
    • Not comprehensive
    • -
    • 128 MooseX distributions on CPAN as of 09/24/2009
    • +
    • 152 MooseX distributions on CPAN as of 02/02/2010
    • Some of them are crap
    @@ -3671,7 +3678,7 @@ use Moose; has file => ( is => 'ro', required => 1 ); has filters => - ( is => 'ro', isa => 'Str' ); + ( is => 'ro', isa => 'ArrayRef[Str]' ); sub run { ... }
    @@ -3687,7 +3694,7 @@ sub run { ... } use App::CLI; -App::CLI->new_with_options()->run(); +App::CLI->new_with_options()->run();
    $ myapp-cli \
        --file foo \
    @@ -3747,12 +3754,21 @@ with HasCollection => { type => 'Int' };

    Questions?

    -
    -

    Part 9: Writing Moose Extensions

    -
    +
    +

    Moose-using Modules

    -
    -

    The End

    +

    + For further reading, a few modules which use Moose ... +

    + +
    @@ -3765,10 +3781,14 @@ with HasCollection => { type => 'Int' };
  • mailing list - moose@perl.org
  • Slides and exercises are in Moose's git repo:
    - git://jules.scsys.co.uk/gitmo/moose-presentations
  • + git://jules.scsys.co.uk/gitmo/moose-presentations
    +
    +

    The End

    +
    +