Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
サーバーサイドエンジニアのためのiOSアプリ開発入門
Search
typester
August 22, 2015
Technology
4.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サーバーサイドエンジニアのためのiOSアプリ開発入門
YAPC::Asia 2015
typester
August 22, 2015
More Decks by typester
See All by typester
Emacs実践入門 Perl編
typester
0
2.7k
XSにまつわる話
typester
4
2.2k
Perlハッカーは息をするようにCPANモジュールを書く
typester
5
7.6k
UV - libuv binding for Perl
typester
1
6.3k
Hacking Mac OS X Cocoa API from Perl
typester
2
430
Other Decks in Technology
See All in Technology
AI秘書と毎日働くのはもう当たり前。開発以外の業務に足りない機能をどう埋める?
minorun365
PRO
4
2.2k
スマートロックを支えるFlutter × ネイティブ連携の実践 / Flutter and Native Integration in Practice: Powering Smart Locks
bitkey
PRO
0
140
Lint の層を組み直した話
bengo4com
2
290
複雑な業務システムを高速でつくるため、チーム全員をつくれる人へ
ayakurabuchi
0
120
Oracle Database Security 詳細解説
oracle4engineer
PRO
1
220
Systems Manager AgentがインストールされたPCを紛失した時の対策を考えてみた
amarelo_n24
1
110
AI AgentによるEmbedded SREの取り組み
tgidgd
1
320
新卒エンジニア、 介護士になる
ryu1013
1
670
企画からFlutter実装まで、1つの機能を一貫して開発したプロセスと成果物
khiroyuki1003
0
130
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
110
Adversary Infrastructure Hunting101
disconinja
0
190
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
310
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
350
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
970
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Ruling the World: When Life Gets Gamed
codingconduct
0
430
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
390
Context Engineering - Making Every Token Count
addyosmani
9
1.3k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
550
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
960
Optimizing for Happiness
mojombo
378
71k
Navigating Team Friction
lara
192
16k
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