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.8k
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.5k
UV - libuv binding for Perl
typester
1
6.2k
Hacking Mac OS X Cocoa API from Perl
typester
2
430
Other Decks in Technology
See All in Technology
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
170
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
600
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
260
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
360
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
160
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
360
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
5
2.1k
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
180
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
210
NW運用でNWトポロジ可視化ツールに期待すること/shumoku-meetup1
corestate55
2
120
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
The Cult of Friendly URLs
andyhume
79
7k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
For a Future-Friendly Web
brad_frost
183
10k
4 Signs Your Business is Dying
shpigford
187
23k
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Curse of the Amulet
leimatthew05
2
14k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
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