X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=e3814b78837583319bfb14b980b4d1a9edde0993;hb=3258951f22a6aed1774ec682fe4ad1365e154405;hp=b3fc1414ac85aa9d782f8aa1532cf6a9e9c8976f;hpb=1d40915d1ad2e2a12bc3bbf64a764ffa6f69994a;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index b3fc141..e3814b7 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;}
@@ -154,7 +155,7 @@ img#me05 {top: 43px;left: 36px;}
package Person;
 use Moose;
 
-has first_name => ( is => 'rw' );
+has first_name => ( is => 'ro' ); @@ -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,8 +893,8 @@ use Moose;

BUILDARGS

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

Object Construction a la Moose

-
Person->new(@_)
+
Person->new(@args)
-
    -
  1. Calls Person->BUILDARGS(@_) to turn @_ into a hashref
  2. +
      +
    1. Calls Person->BUILDARGS(@args) to turn @args into a hashref
    2. Blesses a reference
    3. Populates attributes based on the hashref from #1
    4. -
    5. Calls $new_object->BUILDALL($constructor_args) +
    6. Calls $new_object->BUILDALL($constructor_args)
      ... which calls all BUILD methods
    7. Returns the object
    @@ -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,8 @@ use Moose;
    @@ -1106,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 @@ -1126,7 +1130,7 @@ print $person->first_name; # Dave use Moose; # true -Person->can('extends'); +Person->can('extends'); - - -
    -

    Method Modifiers Summary

    - -
    @@ -2578,11 +2449,11 @@ Item Undef Defined Value - Str - Num - Int - ClassName - RoleName + Str + Num + Int + ClassName + RoleName @@ -2600,7 +2471,7 @@ Item CodeRef RegexpRef GlobRef - FileHandle + FileHandle Object @@ -2609,15 +2480,12 @@ Item

    Bool

    True

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

    False

    0
    -0.0
     '0'
    +''
     undef
    +

    Specio

    + + +
    + +

    Recommendation

    -
    -

    Exercises

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

    Part 6: Advanced Attributes

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

    Trigger Arguments

    + + +
    + +

    Delegation

    @@ -3278,8 +3201,12 @@ has account => ( }, @@ -3368,7 +3295,6 @@ has history => ( use Moose; has _favorite_numbers => ( traits => [ 'Array' ], - is => 'ro', isa => 'ArrayRef[Int]', default => sub { [] }, init_arg => undef, @@ -3406,7 +3332,7 @@ print "$_\n"
  • Bool - set, toggle, ...
  • Hash - get, set, ...
  • Array - already saw it
  • -
  • Code - execute, that's it
  • +
  • Code - execute and execute_method
  • @@ -3431,7 +3357,7 @@ has account => ( isa => 'BankAccount', handles => { receive_100 => - [ 'deposit', 100 ] + [ 'deposit', 100 ], give_100 => [ 'withdraw', 100 ] }, @@ -3447,89 +3373,13 @@ $person->account->deposit(100);
    -

    Traits and Metaclasses

    - - -
    - -
    -

    Traits and Metaclasses

    - - -
    - -
    -

    Traits and Metaclasses

    - - -
    - -
    -

    Simple Trait Example

    - -
    package Person;
    -use Moose;
    -use MooseX::LabeledAttributes;
    -
    -has ssn => (
    -    traits => [ 'Labeled' ],
    -    is     => 'ro',
    -    isa    => 'Str',
    -    label  => 'Social Security Number',
    -);
    -print Person->meta
    -            ->get_attribute('ssn')->label;
    -
    - -
    -

    Simple Metaclass Example

    - -
    package Person;
    -use Moose;
    -use MooseX::LabeledAttributes;
    -
    -has ssn => (
    -    metaclass =>
    -        'MooseX::Meta::Attribute::Labeled',
    -    is        => 'ro',
    -    isa       => 'Str',
    -    label     => 'Social Security Number',
    -);
    -print Person->meta
    -            ->get_attribute('ssn')->label;
    -
    - -
    -

    Traits vs Metaclass

    - - -
    - -

    Advanced Attributes Summary

    @@ -3547,12 +3397,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

    @@ -3560,7 +3418,7 @@ Iterate til this passes all its tests
    • Not comprehensive
    • -
    • 128 MooseX distributions on CPAN as of 09/24/2009
    • +
    • 188 MooseX distributions on CPAN as of 02/03/2011
    • Some of them are crap
    @@ -3569,11 +3427,11 @@ Iterate til this passes all its tests

    Already Mentioned Several

    @@ -3581,11 +3439,11 @@ 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
    -        => ( is => 'ro', isa => 'Str' );
    +    has greeting =>
    +        ( is => 'ro', isa => 'Str' );
     
         method speak {
             say $self->greeting;
    @@ -3600,6 +3458,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?)
  • @@ -3607,7 +3466,7 @@ class Person {

    MooseX::StrictConstructor

      -
    • By default, unknown constructor arguments are ignore
    • +
    • By default, unknown constructor arguments are ignored
    • MX::StrictConstructor turns these into an error
    @@ -3669,7 +3528,7 @@ use Moose; has file => ( is => 'ro', required => 1 ); has filters => - ( is => 'ro', isa => 'Str' ); + ( is => 'ro', isa => 'ArrayRef[Str]' ); sub run { ... }
    @@ -3685,7 +3544,7 @@ sub run { ... } use App::CLI; -App::CLI->new_with_options()->run(); +App::CLI->new_with_options()->run();
    $ myapp-cli \
        --file foo \
    @@ -3745,12 +3604,22 @@ with HasCollection => { type => 'Int' };

    Questions?

    -
    -

    Part 9: Writing Moose Extensions

    -
    +
    +

    Moose-using Modules

    -
    -

    The End

    +

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

    + +
    @@ -3758,22 +3627,26 @@ with HasCollection => { type => 'Int' };
    +
    +

    The End

    +
    +