Accessors: 'yes' or 'no'

download Accessors: 'yes' or 'no'

If you can't read please download the document

Transcript of Accessors: 'yes' or 'no'

Accessors:
'yes' or 'no'?


?

$obj->foo(1);print $obj->foo;

$obj->{foo} = 1;print $obj->{foo};

package MyPackage;

has 'foo' => 42;

1;

package MyPackage;

sub new { my $class = shift; my $self = bless { @_ }, $class;

$self->{foo} = 42;

return $self;}

1;

package MyPackage;

has 'foo' => 1, is => 'ro';has 'bar' => 1, isa => 'Int';

1;

,

package MyPackage2;use base 'MyPackage';

sub foo { my $self = shift;

croak("It's not int!") if @_ and $_[0] =~ /^\d+$/;

$self->SUPER::foo(@_);}

1;


-

Getter

sub get_foo { my $self = shift; return $self->{foo};}

my $value = $self->get_foo;

Getter

my $value = $self->get_foo;

my $value = $self->{foo};

Setter

sub set_foo { my $self = shift; die 'Not enough arguments for set_foo' unless @_; $self->{foo} = shift; return $self;}

$self->set_foo('bar');

Getter + Setter

sub foo { my $self = shift; return $self->{foo} unless @_; die 'Too much arguments' if @_ > 1; $self->{foo} = shift; return $self;}

my $value = $self->foo;$self->foo('bar');


my $value = $self->foo;$self->foo(1);

my $value = $self->{foo};$self->{foo} = 1;

$self->foo(1); # accessor$self->bar(1); # method

sub bar { my $self = shift;

# ...

return rand($self->{foo});}

Accessors in the Wild

Class::MethodMaker
Object::Tiny
Spiffy
Class::Spiffy
accessors
Object::Tiny
Rubyish::Attribute

Class::Accessor
Class::Accessor::Fast
Class::Accessor::Complex
Class::Accessor::Constructor
Class::Accessor::Classy
Class::Accessor::Lite

Class::XSAccessor

Moose
Mouse
Moo
Mo
M

Boose

Plack::Util::Accessor
Mojo::Base
Rose

XS

Mojo::Base

Mojo::Base::XS

Mojolicious
...

use Mojo::Base::XS -infect;

20%

cpanm Mojo::Base::XS
perl -MMojo::Base::XS=-infect

http://github.com/yko/mojo-base-xs

?

?

Yaroslav 'yko' Korshak

Black Perl 2011

| Internal use only

Mojolicious

Mojo::Base187.94

Mojo::Base::XS238.43

newgetset

Mojo::Base111111120618561769912

Mojo::Base::XS166666776923084761905

Class::XSAccessor95238180000005000000

Direct Access1333333222222228333333