X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=b3f57f681376337f550f7a3624631f0a305fcc1c;hb=7f7e655a677ae4e66c2bf208a9898c796a12e779;hp=1c1f1eed72c55d39dcbebc0f688df39f1e258ee5;hpb=f1273f9cb8cc8bbd20afc63f60218aed3efc4107;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index 1c1f1ee..b3f57f6 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
  • @@ -1051,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(); +};
    @@ -1066,7 +1069,7 @@ use Moose;
    @@ -1152,8 +1155,8 @@ Person->can('extends');

    Cleaning Up Moose Droppings

    package Person;
    -use namespace::autoclean;
     use Moose;
    +use namespace::autoclean;
     
     ...
     
    @@ -1233,6 +1236,8 @@ use Moose;
     
     # perl install-moose (if needed)
     
    +## Read the instructions in t/01-classes.t
    +
     # perl bin/prove -lv t/01-classes.t
     
     # edit lib/Person.pm and lib/Employee.pm
    @@ -1304,23 +1309,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 +1344,9 @@ print $person->full_name
    package Person;
     use Moose;
     
    -with 'Printable';
    +with 'Printable'; + +sub as_string { $_[0]->first_name() }
    @@ -1348,6 +1357,8 @@ use Moose; with 'Printable'; +sub as_string { $_[0]->first_name() } + has has_been_printed => ( is => 'rw' ); sub print { @@ -1476,34 +1487,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

    @@ -1540,7 +1523,7 @@ requires 'size'; package Shirt; use Moose; -has size => ( is => 'ro' ); +has size => ( is => 'ro' ); with 'HasSize';
    @@ -1562,9 +1545,9 @@ with 'HasSize';
    package Comparison;
     use Moose;
     
    -has [ 'left', 'right' ] => (
    -    is   => 'ro',
    -    does => 'Comparable',
    +has [ 'left', 'right' ] => (
    +    is   => 'ro',
    +    does => 'Comparable',
     );
     
    @@ -1653,8 +1636,6 @@ requires 'compare';

    Real Examples

    @@ -2404,62 +2371,6 @@ around run => sub {
    -

    Augment and Inner

    - - -
    - -
    -

    Augment and Inner

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

    Augment and Inner

    - - -
    - -
    -

    Augment and Inner Usage

    - - -
    - -

    Method Modifiers Summary

    - -
    - -
    -

    Method Modifiers Summary

    - -
    @@ -2585,15 +2482,12 @@ Item

    Bool

    True

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

    False

    0
    -0.0
     '0'
    +''
     undef
    @@ -3779,7 +3677,7 @@ 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