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
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.6k
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
2
2.8k
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.2k
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
マルチモーダル理解と生成の統合 DeepSeek Janus, etc... / Multimodal Understanding and Generation Integration
hiroga
0
380
10分で紹介するAmazon Bedrock利用時のセキュリティ対策 / 10-minutes introduction to security measures when using Amazon Bedrock
hideakiaoyagi
0
180
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
680
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
5
610
30分でわかる『アジャイルデータモデリング』
hanon52_
9
2.6k
OpenID BizDay#17 KYC WG活動報告(法人) / 20250219-BizDay17-KYC-legalidentity
oidfj
0
240
RECRUIT TECH CONFERENCE 2025 プレイベント【高橋】
recruitengineers
PRO
0
150
PL900試験から学ぶ Power Platform 基礎知識講座
kumikeyy
0
130
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
Scaling GitHub
holman
459
140k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Designing for humans not robots
tammielis
250
25k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Navigating Team Friction
lara
183
15k
Building Applications with DynamoDB
mza
93
6.2k
Optimizing for Happiness
mojombo
376
70k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
GraphQLとの向き合い方2022年版
quramy
44
13k
Automating Front-end Workflow
addyosmani
1368
200k
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