YAPC::Asia 2015
αʔόʔαΠυΤϯδχΞͷͨΊͷJ04ΞϓϦ։ൃೖ!UZQFTUFS :"1$"TJB
View Slide
J04ΞϓϦ։ൃw 4XJGUw (PPECZF0CKFDUJWF$w ແྉͰ࣮ػసૹՄೳʹ 9DPEFҎ߱ IUUQTEFWFMPQFSBQQMFDPNYDPEFEPXOMPBET
࢝ΊΔʹྑ͍࣌ظʂ
1FSMUP4XJGU
$MBTTpackage Foo; use Moose; 1;
$MBTTclass Foo { }
*OIFSJUBODFpackage Dog; use Moose; extends ‘Animal’; 1;
*OIFSJUBODFclass Dog: Animal { }
JOTUBODFWBSJBCMFpackage Dog; use Moose; extends ‘Animal’; has ‘name’ => ( is => ‘rw’, isa => ‘Str’, ); 1;
JOTUBODFWBSJBCMFclass Dog: Animal { var name: String = “” }
MB[Zpackage Dog; use Moose; extends ‘Animal’; has ‘name’ => ( is => ‘rw’, isa => ‘Str’, lazy => 1, default => sub { “John”; }, ); 1;
MB[Zclass Dog: Animal { @lazy var name: String = { return “John” }() }
JOJUJBMJ[FSpackage Dog; use Moose; extends ‘Animal’; sub BUILD { my ($self) = @_; # . . . } 1;
JOJUJBMJ[FSclass Dog: Animal { init() { // . . . } }
JOTUBODFGVODUJPOpackage Dog; use Moose; extends ‘Animal’; sub print_info { my ($self) = @_; printf ‘name=%s\n’, $self->name; } 1;
JOTUBODFGVODUJPOmy $dog = Dog->new; $dog->print_info;
JOTUBODFGVODUJPOclass Dog: Animal { var name: String = “” func print_info() { println(“name=\(self.name)”) } }
JOTUBODFGVODUJPOvar dog = Dog() dog.print_info()
େମΠϝʔδΘͬͨͰ͠ΐ͏͔
࣮ࡍʹ4XJGUͷ΄͏͕ΊͪΌͪ͘Όػೳ๛ͳͷͰɺ͜ͷΓํʹແཧ͕͋Γ·͢ স
1FSM͍͕4XJGUʹདྷͯ ҧײͷͳ͍࠷େͷϙΠϯτ
ϦϑΝϨϯεΧϯτํࣜ
1FSMͰΑ͘Δϛεmy $t = AnyEvent->timer( after => 10, cb => sub { $self->do_something; }, );
1FSMͰΑ͘Δϛεmy $t = AnyEvent->timer( after => 10, cb => sub { $self->do_something; }, ); Scalar::Util::weaken($self);
*OTXJGUvar t = Timer(10, cb: { () -> Void in self?.do_something() })
*OTXJGUvar t = Timer(10, cb: { [weak self] () -> Void in self?.do_something() })
;FSPJOHXFBLw 4XJGU0CKFDUJWF$ͷXFBLࢀর ;FSPJOHXFBLͱݺΕΔw 1FSMͷXFBLࢀরϦϑΝϨϯεΧϯτ͕͞Εͳ͍͚ͩw 4XJGUͷ߹͞ΒʹɺࢀরΧϯτ͕ʹͳΔͱɺXFBLࢀর͍ͯ͠Δม͕ࣗಈతʹOJM [FSPʹͳΔ
1FSMʹͳ͍͚ͲॏཁͳͭΒw 0QUJPOBMͱ͍͏֓೦w 1SPUPDPM
0QUJPOBMͱ͍͏֓೦w 4XJGUͰ WBSGPP4USJOH ͱఆٛͨ͠มʹ4USJOHҎ֎ೖΕΒΕͳ͍
0QUJPOBMͱ͍͏֓೦w WBSGPP4USJOH ͱఆٛ͢ΔͱPQUJPOBMʹͳΔw OJMPS4USJOH͕ೖՄೳ
0QUJPOBMͱ͍͏֓೦w ΞΫηε͢Δ࣌w TFMGGPP OJMͩͬͨ࣌DSBTIw JGMFUGPPTFMGGPP\ ^ ͕͓ͬͪ͜͢͢Ί
0QUJPOBMͱ͍͏֓೦w JGMFUCB[TFMGGPP CBS CB[\ ^w 0QUJPOBMΛશ෦ͨͲͬͯ࠷ޙ·ͰOJM͡Όͳ͔͚ͬͨ࣌ͩ
0QUJPOBMͱ͍͏֓೦w TFMGGPP [email protected] w GPP͕OJMͩͬͨΒԿ͓͖ͳ͍
1SPUPDPMw (Pͷ*OUFSGBDFΈ͍ͨͳͷw 4USVDU1SPUPDPMͰɺ΄Μͱʹ(PΈ͍ͨͳॻ͖ํՄೳ
$1"/$BSUPO
$PDPB1PET
w DQBOpMF1PEpMFw DBSUPOJOTUBMM'PP QPEJOTUBMM'PP
ͳΜ͔࡞ΔσϞ
ϙΠϯτw ࠷ॳ͔ΒᘳͳͷΛ࡞Ζ͏ͱ͠ͳ͍w ζϧͰ͖Δͱ͜Ζζϧ͢Δw ͔͔ࣗͭ͑͠ͳͯ͘ྑ͍w ඞཁʹͳͬͨͷ͚͍֮ͩ͑ͯ͘ͷָ͕ͩ͠ʹͭ͘
ϙΠϯτw ຊ৬ αʔόαΠυͷೳྗΛۦw ΫϥΠΞϯταΠυΊͬͪΌखൈ͖Ͱ͖ΔΑ͏ʹαʔόͰ͕ΜΔ
ϙΠϯλw ੲͱ͕ͪͬͯใ͕ͦΖ͍ͬͯΔͷͰ ͋Μ·Γۤ࿑͠ͳ͍ͣw ެࣜνϡʔτϦΞϧ 4UBSU%FWFMPQJOHJ04"QQT 4XJGUw Ұ෦ຊޠʹͳͬͯ·͢ IUUQTEFWFMPQFSBQQMFDPNKQEPDVNFOUBUJPOw ϐϯϙΠϯτʹΓ͍ͨ͜ͱɾ͏ϑϨʔϜϫʔΫ໊ͰάάΔ ˠ4UBDLPWFSqPX RJJUB
2VFTUJPOT