X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=056d33b8459a696a7965458ae45ab880ecc14014;hb=a575fa9c8324958c05ae5a69a2d98aa907066ef8;hp=8e7aa6569468608b92c6952a9853b62f9d184b2b;hpb=45218088b41b9a52194f6643be141470c2aa99f4;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index 8e7aa65..056d33b 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

-

Dave Rolsky +

Dave Rolsky

@@ -71,7 +71,8 @@ img#me05 {top: 43px;left: 36px;}
@@ -154,7 +155,7 @@ img#me05 {top: 43px;left: 36px;}
package Person;
 use Moose;
 
-has first_name => ( is => 'rw' );
+has first_name => ( is => 'ro' ); @@ -892,8 +893,8 @@ use Moose;

BUILDARGS

@@ -949,10 +950,10 @@ sub BUILD {

Object Construction a la Moose

-
Person->new(@_)
+
Person->new(@args)
    -
  1. Calls Person->BUILDARGS(@_) to turn @_ into a hashref
  2. +
  3. Calls Person->BUILDARGS(@args) to turn @args into a hashref
  4. Blesses a reference
  5. Populates attributes based on the hashref from #1
  6. Calls $new_object->BUILDALL($constructor_args) @@ -967,6 +968,7 @@ sub BUILD {
    • Technically it's a hash reference
    • If you ever treat it as one you are doing it wrong!
    • +
    • Moose probably provides a feature to do what you need
@@ -976,6 +978,7 @@ sub BUILD { @@ -1029,7 +1032,7 @@ extends 'LWP';
  • No DEMOLISH()
  • -
  • But see MooseX::NonMoose for a workaround
  • +
  • But MooseX::NonMoose fixes all of this
  • @@ -1039,6 +1042,7 @@ extends 'LWP'; @@ -1050,13 +1054,13 @@ use Moose; extends 'Person'; -override work => sub { +override work => sub { my $self = shift; die "Pay me first" unless $self->got_paid; - super(); -}; + super(); +};
    @@ -1065,7 +1069,7 @@ use Moose;
    @@ -1107,8 +1111,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 @@ -1152,8 +1155,8 @@ Person->can('extends');

    Cleaning Up Moose Droppings

    package Person;
    -use namespace::autoclean;
     use Moose;
    +use namespace::autoclean;
     
     ...
     
    @@ -1231,7 +1234,7 @@ use Moose;
     
     # perl bin/prove -lv t/00-prereq.t
     
    -# perl install-moose (if needed)
    +## Read the instructions in t/01-classes.t
     
     # perl bin/prove -lv t/01-classes.t
     
    @@ -1304,23 +1307,25 @@ sub print {
       
    package Person;
     use Moose;
     
    -with 'HasPermissions';
    +with 'Printable';

    Classes Consume Roles

    -
    my $person = Person->new(
    +
    package Person;
    +
    +sub as_string { $_[0]->first_name() }
    +
    +...
    +
    +my $person = Person->new(
         first_name   => 'Kenichi',
         last_name    => 'Asai',
         access_level => 42,
     );
     
    -print $person->full_name
    -    . ' has '
    -    . $person->can_access(42)
    -        ? 'great power'
    -        : 'little power';
    +$person->print();
    @@ -1337,7 +1342,9 @@ print $person->full_name
    package Person;
     use Moose;
     
    -with 'Printable';
    +with 'Printable'; + +sub as_string { $_[0]->first_name() }
    @@ -1348,6 +1355,8 @@ use Moose; with 'Printable'; +sub as_string { $_[0]->first_name() } + has has_been_printed => ( is => 'rw' ); sub print { @@ -1428,64 +1437,12 @@ use Moose;
    -

    Method Aliasing

    - -
    package FragileDancer;
    -use Moose;
    -
    -with 'IsFragile' =>
    -         { -alias =>
    -               { break => 'break_bone' } },
    -     'CanBreakdance' =>
    -         { -alias =>
    -               { break => 'break_it_down' } };
    - - -
    - -
    -

    Method Exclusion

    - -
    package FragileDancer;
    -use Moose;
    -
    -with 'IsFragile' =>
    -         { -alias =>
    -               { break => 'break_bone' },
    -           -excludes => 'break' },
    -     'CanBreakdance' =>
    -         { -alias =>
    -               { break => 'break_it_down' },
    -           -excludes => 'break' };
    -
    - -
    -

    And then ...

    - -
    package FragileDancer;
    -use Moose;
    -
    -sub break {
    -    my $self = shift;
    -
    -    $self->break_it_down;
    -    if ( rand(1) < 0.5 ) {
    -        $self->break_bone;
    -    }
    -}
    -
    - -
    -

    Still Full of Fail

    +

    Conflicts Are a Smell

    @@ -1528,34 +1485,6 @@ Integer->does('Comparable'); # also true!
    -

    Name Conflicts Between Roles

    - -
    package HasSubProcess;
    -use Moose::Role;
    -
    -sub execute { ... }
    -
    -package Killer;
    -use Moose::Role;
    -
    -with 'HasSubProcess';
    -
    -sub execute { ... }
    -
    - -
    -

    Delayed Conflict

    - -
    package SysadminAssassin;
    -with 'Killer';
    - - -
    - -

    Roles as Interfaces

    @@ -1592,7 +1521,7 @@ requires 'size'; package Shirt; use Moose; -has size => ( is => 'ro' ); +has size => ( is => 'ro' ); with 'HasSize';
    @@ -1614,9 +1543,9 @@ with 'HasSize';
    package Comparison;
     use Moose;
     
    -has [ 'left', 'right' ] => (
    -    is   => 'ro',
    -    does => 'Comparable',
    +has [ 'left', 'right' ] => (
    +    is   => 'ro',
    +    does => 'Comparable',
     );
     
    @@ -1705,8 +1634,6 @@ requires 'compare';

    Real Examples

    @@ -2456,60 +2369,6 @@ around run => sub {
    -

    Augment and Inner

    - - -
    - -
    -

    Augment and Inner

    - -
    package Document;
    -
    -sub xml { '<doc>' . inner() . '</doc>' }
    -
    -package Report;
    -extends 'Document';
    -augment xml =>
    -    sub { title() . inner() . summary() };
    -
    -package TPSReport;
    -extends 'Report';
    -augment xml =>
    -    sub { tps_xml() . inner() };
    -
    - -
    -

    Augment and Inner

    - - -
    - -
    -

    Augment and Inner Usage

    - - -
    - -

    Method Modifiers Summary

    - -
    - -
    -

    Method Modifiers Summary

    - -
    @@ -2635,15 +2480,12 @@ Item

    Bool

    True

    -
    1
    -924.1
    -'true'
    -{}
    +
    1

    False

    0
    -0.0
     '0'
    +''
     undef
    @@ -3594,12 +3441,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

    @@ -3607,7 +3462,7 @@ Iterate til this passes all its tests
    • Not comprehensive
    • -
    • 152 MooseX distributions on CPAN as of 02/02/2010
    • +
    • 188 MooseX distributions on CPAN as of 02/03/2011
    • Some of them are crap
    @@ -3628,7 +3483,7 @@ Iterate til this passes all its tests

    MooseX::Declare

    use MooseX::Declare;
    -use 5.10.0; # for say
    +use 5.12.0; # for say
     
     class Person {
         has greeting =>
    @@ -3647,7 +3502,7 @@ class Person {
         
  • Still experimental-ish, but seeing more and more use
  • Not a source filter!
  • Hooks into the Perl parser rather than filtering all your code
  • -
  • But not supported by PPI, perltidy, etc.
  • (yet?) +
  • But not supported by PPI, perltidy, etc. (yet?)
  • @@ -3793,12 +3648,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 ... +

    + +
    @@ -3811,10 +3675,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://git.moose.perl.org/moose-presentations.git
    +
    +

    The End

    +
    +