Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバーサイドエンジニアのためのiOSアプリ開発入門
Search
typester
August 22, 2015
Technology
0
4.7k
サーバーサイドエンジニアのためのiOSアプリ開発入門
YAPC::Asia 2015
typester
August 22, 2015
Tweet
Share
More Decks by typester
See All by typester
Emacs実践入門 Perl編
typester
0
2.7k
XSにまつわる話
typester
4
2.1k
Perlハッカーは息をするようにCPANモジュールを書く
typester
5
7.3k
UV - libuv binding for Perl
typester
1
6.1k
Hacking Mac OS X Cocoa API from Perl
typester
2
400
Other Decks in Technology
See All in Technology
AIエージェント開発のノウハウと課題
pharma_x_tech
9
4.9k
DeepSeekとは?何がいいの? - Databricksと学ぶDeepSeek! 〜これからのLLMに備えよ!〜
taka_aki
1
180
Охота на косуль у древних
ashapiro
0
130
OPENLOGI Company Profile
hr01
0
60k
Global Databaseで実現するマルチリージョン自動切替とBlue/Greenデプロイ
j2yano
0
170
スクラムというコンフォートゾーンから抜け出そう!プロジェクト全体に目を向けるインセプションデッキ / Inception Deck for seeing the whole project
takaking22
3
170
Two Blades, One Journey: Engineering While Managing
ohbarye
4
2.7k
AIエージェント入門
minorun365
PRO
33
20k
貧民的プログラミングのすすめ
kakehashi
PRO
1
150
手を動かしてレベルアップしよう!
maruto
0
260
プロダクト開発者目線での Entra ID 活用
sansantech
PRO
0
140
30→150人のエンジニア組織拡大に伴うアジャイル文化を醸成する役割と取り組みの変化
nagata03
0
360
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
660
Writing Fast Ruby
sferik
628
61k
How to Ace a Technical Interview
jacobian
276
23k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
380
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Bash Introduction
62gerente
611
210k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Site-Speed That Sticks
csswizardry
4
420
Transcript
αʔόʔαΠυΤϯδχΞ ͷͨΊͷJ04ΞϓϦ։ൃೖ !UZQFTUFS :"1$"TJB
J04ΞϓϦ։ൃ w 4XJGU w (PPECZF0CKFDUJWF$ w ແྉͰ࣮ػసૹՄೳʹ 9DPEFҎ߱ IUUQTEFWFMPQFSBQQMFDPNYDPEF
EPXOMPBET
࢝ΊΔʹྑ͍࣌ظʂ
1FSMUP4XJGU
$MBTT package Foo; use Moose; 1;
$MBTT class Foo { }
*OIFSJUBODF package Dog; use Moose; extends ‘Animal’; 1;
*OIFSJUBODF class Dog: Animal { }
JOTUBODFWBSJBCMF package Dog; use Moose; extends ‘Animal’; has
‘name’ => ( is => ‘rw’, isa => ‘Str’, ); 1;
JOTUBODFWBSJBCMF class Dog: Animal { var name: String = “”
}
MB[Z package Dog; use Moose; extends ‘Animal’; has
‘name’ => ( is => ‘rw’, isa => ‘Str’, lazy => 1, default => sub { “John”; }, ); 1;
MB[Z class Dog: Animal { @lazy var name: String =
{ return “John” }() }
JOJUJBMJ[FS package Dog; use Moose; extends ‘Animal’; sub
BUILD { my ($self) = @_; # . . . } 1;
JOJUJBMJ[FS class Dog: Animal { init() { // . .
. } }
JOTUBODFGVODUJPO package Dog; use Moose; extends ‘Animal’; sub
print_info { my ($self) = @_; printf ‘name=%s\n’, $self->name; } 1;
JOTUBODFGVODUJPO my $dog = Dog->new; $dog->print_info;
JOTUBODFGVODUJPO class Dog: Animal { var name: String = “”
func print_info() { println(“name=\(self.name)”) } }
JOTUBODFGVODUJPO var 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; }, );
1FSMͰΑ͘Δϛε my $t = AnyEvent->timer( after => 10, cb =>
sub { $self->do_something; }, ); Scalar::Util::weaken($self);
*OTXJGU var t = Timer(10, cb: { () -> Void
in self?.do_something() })
*OTXJGU var t = Timer(10, cb: { [weak self] ()
-> Void in self?.do_something() })
;FSPJOHXFBL w 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ͩͬͨ࣌DSBTI w JGMFUGPPTFMGGPP\ ^
͕͓ͬͪ͜͢͢Ί
0QUJPOBMͱ͍͏֓೦ w JGMFUCB[TFMGGPP CBS CB[\ ^ w 0QUJPOBMΛશ෦ͨͲͬͯ࠷ޙ·ͰOJM͡Όͳ͔ͬ ͚ͨ࣌ͩ
0QUJPOBMͱ͍͏֓೦ w TFMGGPP EP@TPNFUIJOH w GPP͕OJMͩͬͨΒԿ͓͖ͳ͍
1SPUPDPM w (Pͷ*OUFSGBDFΈ͍ͨͳͷ w 4USVDU 1SPUPDPMͰɺ΄Μͱʹ(PΈ͍ͨͳॻ ͖ํՄೳ
$1"/$BSUPO
$PDPB1PET
w DQBOpMF1PEpMF w DBSUPOJOTUBMM'PP QPEJOTUBMM'PP
ͳΜ͔࡞ΔσϞ
ϙΠϯτ w ࠷ॳ͔ΒᘳͳͷΛ࡞Ζ͏ͱ͠ͳ͍ w ζϧͰ͖Δͱ͜Ζζϧ͢Δ w ͔͔ࣗͭ͑͠ͳͯ͘ྑ͍ w ඞཁʹͳͬͨͷ͚͍֮ͩ͑ͯ͘ͷָ͕ͩ͠ ʹͭ͘
ϙΠϯτ w ຊ৬ αʔόαΠυ ͷೳྗΛۦ w ΫϥΠΞϯταΠυΊͬͪΌखൈ͖Ͱ͖ΔΑ ͏ʹαʔόͰ͕ΜΔ
ϙΠϯλ w ੲͱ͕ͪͬͯใ͕ͦΖ͍ͬͯΔͷͰ ͋Μ·Γۤ࿑͠ͳ͍ͣ w ެࣜνϡʔτϦΞϧ 4UBSU%FWFMPQJOHJ04"QQT 4XJGU w
Ұ෦ຊޠʹͳͬͯ·͢ IUUQTEFWFMPQFSBQQMFDPNKQEPDVNFOUBUJPO w ϐϯϙΠϯτʹΓ͍ͨ͜ͱɾ͏ϑϨʔϜϫʔΫ໊ͰάάΔ ˠ4UBDLPWFSqPX RJJUB
2VFTUJPOT