Slide 1

Slide 1 text

Objective-C J04%$
 IUUQTJPTEDKQOPEF ৄղ

Slide 2

Slide 2 text

ࣗݾ঺հ ໊લኍ੉༤େ ৬छJ04&OHJOFFS
 ໊͋ͩ4UBSޤ৯ 4XJGU੡ͷϥΠϒϥϦΛ͍͔ͭ͘࡞ͬͯެ։ͯ͠·͢
 
 ελʔ͍ͩ͘͞ CBOO[BJ ZIJSPTF

Slide 3

Slide 3 text

ࠓ೔͓࿩͢͠Δ͜ͱɾ͍ͨ͜͠ͱ IUUQTJPTEDKQOPEF

Slide 4

Slide 4 text

ࠓ೔ͷλʔήοτ૚ IUUQTJPTEDKQOPEF

Slide 5

Slide 5 text

ࠓ೔ͷλʔήοτ૚ IUUQTJPTEDKQOPEF ओʹ4XJGUͰJ04։ൃ͍ͯ͠Δํ

Slide 6

Slide 6 text

ࠓ೔ͷλʔήοτ૚ IUUQTJPTEDKQOPEF 0CKFDUJWF$͕࿀͘͠ͳͬͯདྷͨํ

Slide 7

Slide 7 text

ࠓ೔ͷλʔήοτ૚ IUUQTJPTEDKQOPEF 0CKFDUJWF$ͷ͜ͱΛ͋·Γ஌Βͳ͍ํ޲͚

Slide 8

Slide 8 text

ࠓ೔ͷλʔήοτ૚ IUUQTJPTEDKQOPEF ΋ͪΖΜͦ͏͡Όͳ͍ํ΋ָ͠ΜͰ͍ͩ͘͞

Slide 9

Slide 9 text

ͲͪΒ͔ͱ͍͏ͱද໘తͳ͜ͱͷ͓࿩ IUUQTJPTEDKQOPEF جຊతͳػೳ͔ΒԠ༻·Ͱ
 ࣌ؒͷڐ͢ݶΓ͓఻͑͠·͢

Slide 10

Slide 10 text

͜ͷൃදͷ0CKFDUJWF$ J04։ൃͳͷͰ'PVOEBUJPOΛ࢖༻͢Δ͜ͱલఏͰ࿩͠·͢ "3$/PU.3$ 1VSF0CKFDUJWF$/PU0CKFDUJWF$ $ݴޠ΋ग़͖ͯ·͢

Slide 11

Slide 11 text

ຊ୊ جຊ Ϋϥεͷએݴ ϝιου એݴ ࣮૷ ݺͼग़͠ #MPDLT .BDSP Ԡ༻ - Type inference. - Method chain. - The strongest Objective-C I thought

Slide 12

Slide 12 text

Ϋϥεͷએݴ CustomClass.h @interface CustomClass : NSObject @end CustomClass.m #import “CustomClass.h" @implementation CustomClass @end

Slide 13

Slide 13 text

Ϋϥεͷએݴ CustomClass.h @interface CustomClass : NSObject // ͜͜ʹΠϯλʔϑΣʔε @end CustomClass.m #import “CustomClass.h" @implementation CustomClass // ͜͜ʹ࣮૷ @end I ϔομʔϑΝΠϧ ͱ N ϝΠϯϑΝΠϧ Λ࡞Δ 9DPEFͰΫϥεΛ࡞ΔͱͰ͖͍ͯ·͢

Slide 14

Slide 14 text

Ϋϥεͷએݴ CustomClass.h @interface CustomClass : NSObject // ͜͜ʹΠϯλʔϑΣʔε @end CustomClass.m #import “CustomClass.h" @implementation CustomClass // ͜͜ʹ࣮૷ @end IϑΝΠϧ͸ΠϯλʔϑΣʔεΛఆٛ͢Δ ͨΊͷϑΝΠϧ IϑΝΠϧʹΫϥεΛએݴ͠ͳ͍ͱଞͷΫ ϥε͔Β͸ݟΔ͜ͱ͕Ͱ͖ͳ͍

Slide 15

Slide 15 text

$MBTTͷએݴ CustomClass.h @interface CustomClass : NSObject // ͜͜ʹΠϯλʔϑΣʔε @end CustomClass.m #import “CustomClass.h" @implementation CustomClass // ͜͜ʹ࣮૷ @end ͍͍ͩͨ/40CKFDU΋͘͠͸ /40CKFDUΛܧঝ͍ͯ͠ΔΫϥεΛ ܧঝ͓͚ͯ͠͹0,

Slide 16

Slide 16 text

Ϋϥεͷએݴ CustomClass.h @interface CustomClass : NSObject // ͜͜ʹΠϯλʔϑΣʔε @end CustomClass.m #import “CustomClass.h" @implementation CustomClass // ͜͜ʹ࣮૷ @end NʹIͰએݴͨ͠಺༰Λ࣮૷͍ͯ͘͠

Slide 17

Slide 17 text

CustomClass.h @interface CustomClass : NSObject // ͜͜ʹΠϯλʔϑΣʔε @end ϝιουͷએݴ

Slide 18

Slide 18 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ͜Μͳײ͡

Slide 19

Slide 19 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ϝιουͷએݴ ͕͜͜ฦΓ஋

Slide 20

Slide 20 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ϝιουͷએݴ ϝιουͷ໊લ

Slide 21

Slide 21 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ϝιουͷએݴ ୈೋҾ਺Ҏ߱ʹ͸-BCFM͕ͭ͘

Slide 22

Slide 22 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ϝιουͷએݴ AA͕Ϋϥεϝιου 4XJGUͩͱADMBTTGVODA AA͕Πϯελϯεϝιου 4XJGUͩͱAGVODA

Slide 23

Slide 23 text

CustomClass.h @interface CustomClass : NSObject + (instancetype)method; - (void)method:(NSObject *)hoge; - (NSObject *)method:(NSObject *)hoge with:(NSObject *)fuga; @end ϝιουͷએݴ AJOTUBODFUZQFA͸ࣗ෼ͷ
 ΠϯελϯεͷܕΛද͢એݴ
 ܧঝઌͰ͜ͷϝιουΛ࢖ͭ৔߹
 ܧঝઌͷܕͱͯ͠ฦΔ

Slide 24

Slide 24 text

@interface CustomClass : NSObject + (instancetype)method; @end @interface CustomClass2 : CustomClass //- (instancetype)method; @end JOTUBODFUZQFʹ͍ͭͯ

Slide 25

Slide 25 text

@interface CustomClass : NSObject + (instancetype)method; @end @interface CustomClass2 : CustomClass //- (instancetype)method; @end JOTUBODFUZQF ͜ͷ৔߹ͷAJOTUBODFUZQFA͸ $VTUPN$MBTT

Slide 26

Slide 26 text

@interface CustomClass : NSObject + (instancetype)method; @end @interface CustomClass2 : CustomClass //- (instancetype)method; @end JOTUBODFUZQF ͜ͷ৔߹ͷAJOTUBODFUZQFA͸ $VTUPN$MBTT

Slide 27

Slide 27 text

CustomClass.m #import “CustomClass.h" @implementation CustomClass // ͜͜ʹ࣮૷ @end ϝιουͷ࣮૷

Slide 28

Slide 28 text

CustomClass.m
 #import “CustomClass.h" @implementation CustomClass + (instancetype)method1 { CustomClass *custom = [[CustomClass alloc] init]; return custom; } - (void)method: (NSObject *)hoge { // do something... } @end ͜Μͳײ͡

Slide 29

Slide 29 text

CustomClass.m
 #import “CustomClass.h" @implementation CustomClass + (instancetype)method1 { CustomClass *custom = [[CustomClass alloc] init]; return custom; } - (void)method: (NSObject *)hoge { // do something... } @end ϝιουͷ࣮૷ IͰॻ͔Ε͍ͯΔ௨Γʹએݴ͠ɺ
 \^είʔϓͷதͰϝιουͷ࣮૷

Slide 30

Slide 30 text

CustomClass.m
 #import “CustomClass.h" @implementation CustomClass + (instancetype)method1 { CustomClass *custom = [[CustomClass alloc] init]; return custom; } - (void)method: (NSObject *)hoge { // do something... } @end ϝιουͷ࣮૷ ϩʔΧϧม਺΍ASFUVSOAจͱ͔ࡉ͔͍͜ ͱʹ͍ͭͯ͸ׂѪ

Slide 31

Slide 31 text

@interface CustomClass : NSObject + (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end ϝιουͷݺͼग़͠

Slide 32

Slide 32 text

@interface CustomClass : NSObject + (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end $VTUPN$MBTT͔Β$VTUPN$MBTTΛ࢖͏ ҧ͏Ϋϥε

Slide 33

Slide 33 text

@interface CustomClass : NSObject + (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end ϝιουͷݺͼग़͠ ͜ͷೋͭʹ஫໨

Slide 34

Slide 34 text

@interface CustomClass : NSObject - (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end ϝιουͷݺͼग़͠ 0CKFDUJWF$ͷϝιουͷݺͼग़͠͸
 ͷܗʹͳΔ

Slide 35

Slide 35 text

@interface CustomClass : NSObject - (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end ϝιουͷݺͼग़͠ ͜ͷ৔߹͸
 A3FDFJWFSAA$VTUPN$MBTTA ΫϥεʹϝιουΛૹ͍ͬͯΔͷͰ
 ͜Ε͸Ϋϥεϝιουͷݺͼग़͠

Slide 36

Slide 36 text

@interface CustomClass : NSObject - (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [object method]; } @end ϝιουͷݺͼग़͠ ͜ͷ৔߹͸
 A3FDFJWFSAAPCKFDUA $VTUPN$MBTTܕͷΠϯελϯεʹ
 ϝιουΛૹ͍ͬͯΔͷͰ Πϯελϯεϝιου

Slide 37

Slide 37 text

@interface CustomClass : NSObject - (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [[object method] method]; } @end ϝιουͷݺͼग़͠ ͪͳΈʹϝιουνΣΠϯΛ
 ͢Δͱ͜͏ͳΔ

Slide 38

Slide 38 text

@interface CustomClass : NSObject + (instancetype)method; @end @implementation CustomClass2 - (void)someMethod { CustomClass* object = [[CustomClass alloc] init]; [[[[object method] method] method]; } @end ϝιουͷݺͼग़͠ ʜ

Slide 39

Slide 39 text

ʜ

Slide 40

Slide 40 text

[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[object method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] method] ; ϝιουνΣΠϯΛ͢Δͱ<>͕͍ͬͺ͍ʹ ͳΔ

Slide 41

Slide 41 text

ݟͨ໨͕

Slide 42

Slide 42 text

<>͚ͭ͗ͯ͢

Slide 43

Slide 43 text

Χοίѱ͍

Slide 44

Slide 44 text

ݴ͍͔͚ͨͬͨͩͰ͢

Slide 45

Slide 45 text

ຊ୊ جຊ Ϋϥεͷએݴ ϝιου એݴ ࣮૷ ݺͼग़͠ #MPDLT .BDSP Ԡ༻ - Type inference. - Method chain. - The strongest Objective-C I thought ࣍͜͜

Slide 46

Slide 46 text

#MPDLTͱ͸ 4XJGUͰ͍͏ͱ͜Ζͷ$MPTVSF ͬΆ͍΋ͷ $MPTVSFΑΓ΋ѻ͍ͮΒ͍ ॻ͖ํ͕൥ࡶ ॻ͖ํΛ͍ͭ΋๨ΕΔ IUUQGVDLJOHCMPDLTZOUBYDPNهࡌͷ࢓ํ͸͔͜͜Β

Slide 47

Slide 47 text

#MPDLTͱ͸ 4XJGUͰ͍͏ͱ͜Ζͷ$MPTVSF ͬΆ͍΋ͷ $MPTVSFΑΓ΋ѻ͍ͮΒ͍ ॻ͖ํ͕൥ࡶ ॻ͖ํΛ͍ͭ΋๨ΕΔ IUUQGVDLJOHCMPDLTZOUBYDPNهࡌͷ࢓ํ͸͔͜͜Β એݴ͢Δ৔ॴʹΑͬͯॻ͖ํ͕มΘΔ ৄ͍͠એݴͷ࢓ํ͸͔͜͜ΒΈ͍ͯͩ͘͞

Slide 48

Slide 48 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end

Slide 49

Slide 49 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end 0CKFDUJWF$ͷϓϩύςΟͷએݴ

Slide 50

Slide 50 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end ͜͜ʹଐੑ
 ৄࡉ͸লུ

Slide 51

Slide 51 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end $PQZΛ͚ͭΔඞཁ͕͋Δ

Slide 52

Slide 52 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end ฦΓ஋ͷܕ

Slide 53

Slide 53 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end #MPDLTͷ໊લ ϓϩύςΟͷ໊લ

Slide 54

Slide 54 text

ࠓճ͸ϓϩύςΟͷΈ঺հ એݴ
 !JOUFSGBDF$VTUPN$MBTT/40CKFDU @property (nonatomic, copy) NSObject* (^blocks)(NSInteger); @end Ҿ਺ͷܕ

Slide 55

Slide 55 text

#MPDLTͰ͸ͳ͍৔߹ એݴ !JOUFSGBDF$VTUPN$MBTT/40CKFDU !QSPQFSUZ OPOBUPNJD DPQZ /40CKFDUPCKFDU @end #MPDLTͰ͸ͳ͍৔߹͸͜Μͳײ͡
 ͜͜ʹอ࣋͢ΔܕͱϓϩύςΟ໊Λهࡌ

Slide 56

Slide 56 text

#MPDLTͷϓϩύςΟΛ࢖͏ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %ld", integer); return [[NSObject alloc] init]; }; self.blocks(1); // log: 1 }

Slide 57

Slide 57 text

#MPDLTͷϓϩύςΟΛ࢖͏ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %ld", integer); return [[NSObject alloc] init]; }; self.blocks(1); // log: 1 } ฦΓ஋

Slide 58

Slide 58 text

#MPDLTͷϓϩύςΟΛ࢖͏ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %ld", integer); return [[NSObject alloc] init]; }; self.blocks(1); // log: 1 } Ҿ਺

Slide 59

Slide 59 text

#MPDLTͷϓϩύςΟΛ࢖͏ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %ld", integer); return [[NSObject alloc] init]; }; self.blocks(1); // log: 1 } \^ͷத਎͕࣮૷

Slide 60

Slide 60 text

#MPDLTͷϓϩύςΟΛ࢖͏ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %ld", integer); return [[NSObject alloc] init]; }; self.blocks(1); // log: 1 } ࣮ߦ͢Δͱ͖

Slide 61

Slide 61 text

4FMGΛΩϟϓνϟ͍ͨ͠ͱ͖ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %@", self); return [[NSObject alloc] init]; }; }

Slide 62

Slide 62 text

4FMGΛΩϟϓνϟ͍ͨ͠ͱ͖ ࢖͏ - (void)someMethod { self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %@", self); return [[NSObject alloc] init]; }; } TFMGΛΩϟϓνϟ͢Δͱ
 ॥؀ࢀর͕ى͖ͯ͠·͏

Slide 63

Slide 63 text

ऑࢀরΛ࢖͏ ࢖͏ - (void)someMethod { __weak CustomClass *weakSelf = self; self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %@", weakSelf); return [[NSObject alloc] init]; }; }

Slide 64

Slide 64 text

ऑࢀরΛ࢖͏ ࢖͏ - (void)someMethod { __weak CustomClass *weakSelf = self; self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %@", weakSelf); return [[NSObject alloc] init]; }; } XFBLͷTFMGͷࢀরΛ࣋ͭ

Slide 65

Slide 65 text

ऑࢀরΛ࢖͏ ࢖͏ - (void)someMethod { __weak CustomClass *weakSelf = self; self.blocks = ^NSObject* (NSInteger integer) { NSLog(@"log: %@", weakSelf); return [[NSObject alloc] init]; }; } CMPDLTͷதͰ͸XFBL4FMGΛ࢖͏

Slide 66

Slide 66 text

॥؀ࢀর͕ى͖Δ৔߹͸ؾΛ͚ͭΑ͏

Slide 67

Slide 67 text

ຊ୊ جຊ Ϋϥεͷએݴ ϝιου એݴ ࣮૷ ݺͼग़͠ #MPDLT .BDSP Ԡ༻ - Type inference. - Method chain. - The strongest Objective-C I thought ࣍͜͜

Slide 68

Slide 68 text

.BDSPͱ͸ ϓϩάϥϜதͷจࣈྻΛ͋Β͔͡Ίఆٛͨ͠نଇʹ͕ͨͬͯ͠ஔ׵ ͢Δػೳͷ͜ͱΛ͍͍·͢ ŠҾ༻$ݴޠͷϚΫϩͷجຊʹ͍ͭͯ IUUQXXXDMBOHPSHEFUBJMNBDSP@CBTJDIUNM

Slide 69

Slide 69 text

.BDSPͱ͸ ϓϩάϥϜதͷจࣈྻΛ͋Β͔͡Ίఆٛͨ͠نଇʹ͕ͨͬͯ͠ஔ׵ ͢Δػೳͷ͜ͱΛ͍͍·͢ ŠҾ༻$ݴޠͷϚΫϩͷجຊʹ͍ͭͯ IUUQXXXDMBOHPSHEFUBJMNBDSP@CBTJDIUNM ͜Ε͚ͩݴΘΕͯ΋Θ͔Βͳ͍ͱࢥ͏ͷͰ ࢖ͬͯΈ·͠ΐ͏

Slide 70

Slide 70 text

.BDSPͱ͸ ϓϩάϥϜதͷจࣈྻΛ͋Β͔͡Ίఆٛͨ͠نଇʹ͕ͨͬͯ͠ஔ׵ ͢Δػೳͷ͜ͱΛ͍͍·͢ ŠҾ༻$ݴޠͷϚΫϩͷجຊʹ͍ͭͯ IUUQXXXDMBOHPSHEFUBJMNBDSP@CBTJDIUNM ·͔ͣ͜͜Β نଇͷఆٛΛ͢Δ

Slide 71

Slide 71 text

نଇΛఆٛ͢Δ #define Log NSLog(@"ίίϮτΦολϤʔ") ఆٛεϧϤʔએݴ

Slide 72

Slide 72 text

نଇΛఆٛ͢Δ #define Log NSLog(@"ίίϮτΦολϤʔ") ͜ͷఆٛͷ໊લ

Slide 73

Slide 73 text

.BDSPͱ͸ ϓϩάϥϜதͷจࣈྻΛ͋Β͔͡Ίఆٛͨ͠نଇʹ͕ͨͬͯ͠ஔ׵ ͢Δػೳͷ͜ͱΛ͍͍·͢ ŠҾ༻$ݴޠͷϚΫϩͷجຊʹ͍ͭͯ IUUQXXXDMBOHPSHEFUBJMNBDSP@CBTJDIUNM ࣍͜͜Λ֬ೝ

Slide 74

Slide 74 text

نଇΛఆٛ͢Δ #define Log NSLog(@"ίίϮτΦολϤʔ") ஔ׵͢Δ಺༰

Slide 75

Slide 75 text

ஔ׵͢Δ಺༰ #define Log NSLog(@"ίίϮτΦολϤʔ") -PHͱϓϩάϥϜதʹॻ͘ͱ
 /4-PH !lίίϮτΦολϤʔ ʹஔ׵͞ΕΔ

Slide 76

Slide 76 text

ͭ·Γ͜͏ͳΔ #define Log NSLog(@"ίίϮτΦολϤʔ") - (void)someMethod { Log; }

Slide 77

Slide 77 text

ͭ·Γ͜͏ͳΔ #define Log NSLog(@"ίίϮτΦολϤʔ") - (void)someMethod { Log; // ίίϮτΦολϤʔ } ͕͜͜
 /4-PH !lίίϮτΦολϤʔ ஔ׵͞ΕΔ

Slide 78

Slide 78 text

.BDSPʹ͍ͭͯ ଞʹ΋Ҿ਺ΛऔΔ͜ͱ͕Ͱ͖ͨΓ ఆ਺ͱͯ͠એݴ͢ΔΑ͏ͳ࢖͍ํͩͬͨΓ τʔΫϯͱݺ͹ΕΔػೳͩͬͨΓ͕͋ΔͷͰ ௐ΂ͯΈΔͱ໘ന͍Ͱ͢ ඇৗʹڧྗͰ͕͢࢖͍͗͢ʹ͸͝஫ҙ

Slide 79

Slide 79 text

ຊ୊ جຊ Ϋϥεͷએݴ ϝιου એݴ ࣮૷ ݺͼग़͠ #MPDLT .BDSP Ԡ༻ - Type inference. - Method chain. - The strongest Objective-C I thought ͔͜͜Β͕ຊ౰ʹ࿩͔ͨͬͨ͠಺༰ͩ͊ʂ

Slide 80

Slide 80 text

5ZQFJOGFSFODF

Slide 81

Slide 81 text

5ZQFJOGFSFODF ܕਪ࿦

Slide 82

Slide 82 text

0CKFDUJWF$ͷܕ 0CKFDUJWF$͸ϓϩάϥϜதʹܕΛهड़͢Δ͜ͱ͕Ͱ͖·͕͢ɺ࣮ ࡍ͸3VOUJNFͰܕ͕ܾ·Δಈతܕ෇͚ݴޠͰ͢ɻ ϓϩάϥϜதʹܕΛએݴ͢Δ͜ͱͰ*%&ͷิ׬͕ޮ͖΍͍͢ͱݴͬ ͨར఺͕͋Γ·͢ɻ ࣮ࡍʹ͸ಈతܕ෇͚Ͱ͋Δ͜ͱʹ͸มΘΒͳ͍ͷͰ͕͢ɺ*%&͕ղ ऍ͢ΔܕΛਪ࿦ͤ͞Δ͜ͱ͕Ͱ͖·͢ɻ ͦ͏ɺ@@BVUP@UZQFͳΒͶ

Slide 83

Slide 83 text

@@BVUP@UZQF - (void)someMethod { __auto_type string = @"hogehoge"; string.length; }

Slide 84

Slide 84 text

@@BVUP@UZQF - (void)someMethod { __auto_type string = @"hogehoge"; string.length; } ීஈܕΛએݴ͢Δ৔ॴʹ
 @@BVUP@UZQF

Slide 85

Slide 85 text

@@BVUP@UZQF - (void)someMethod { __auto_type string = @"hogehoge"; string.length; } /44USJOHͷMFOHUI
 ϓϩύςΟʹΞΫηεͰ͖Δ ͭ·Γܕਪ࿦Λͯ͘͠ΕΔ

Slide 86

Slide 86 text

@@BVUP@UZQF - (void)someMethod { __auto_type string = @"hogehoge"; string.length; } ѹ౗తਪ࿦

Slide 87

Slide 87 text

.FUIPEDIBJO

Slide 88

Slide 88 text

.FUIPEDIBJO MJLF4XJGU

Slide 89

Slide 89 text

4XJGUͬΆ͘ .FUIPEDIBJO

Slide 90

Slide 90 text

4XJGUͬΆ͘ .FUIPEDIBJO ͑ʁ0CKFDUJWF$ͬͯ͋ͷϝιουݺͼग़͢ͱ͖ʹ<>͚ͭ͗ͯ͢Χοί ѱ͍ݴޠͰ͠ΐʁ ͦ͏ࢥͬͨͦ͜ͷ͋ͳͨਖ਼ղͰ͢ɻ ࢒೦ͳ͕Βϝιουݺͼग़͠͸<>͚ͭΔͷ͕0CKFDUJWF$ ͜͜Ͱ͸ࠓ·Ͱಘͨ஌ࣝͷதͰ<>͚ͭͣʹॲཧΛॻ͍͍͖ͯ ͞ΒʹͦΕΛͭͳ͍Ͱ͍͖·͢ɻ

Slide 91

Slide 91 text

๨Εͨਓ͸ޙͰεϥΠυݟ௚ͯ͠Ͷ @interface CustomClass : NSObject @property (nonatomic, copy) CustomClass* (^method)(); @property (nonatomic, copy) CustomClass* (^chain)(); @end ฦΓ஋͖ͭCMPDLTͷϓϩύςΟΛએݴ͢Δ

Slide 92

Slide 92 text

࢖͍ํ - (void)someMethod { self.chain(); }

Slide 93

Slide 93 text

࢖͍ํ - (void)someMethod { self.method(); } ॲཧΛ໊લ Ͱݺͼग़ͤΔ

Slide 94

Slide 94 text

ϝιουνΣΠϯ self.method().chain().chain().chain().chain().chain().chain( ).chain().chain().chain().chain().chain().chain().chain().ch ain().chain().chain().chain().chain().chain().chain().chain( ).chain().chain().chain().chain().chain().chain().chain().ch ain().chain().chain().chain().chain();

Slide 95

Slide 95 text

͚ͭ͗ͯ͢΋

Slide 96

Slide 96 text

͔͍͍ͬ͜

Slide 97

Slide 97 text

࣍ߦ͖·͠ΐ͏

Slide 98

Slide 98 text

The strongest Objective-C I thought

Slide 99

Slide 99 text

๻ͷ͔Μ͕͑ͨ࠷ڧͷObjective-C

Slide 100

Slide 100 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld”, count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); }

Slide 101

Slide 101 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld”, count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); } ๻ͷ͔Μ͕͑ͨ࠷ڧͷ0CKFDUJWF$

Slide 102

Slide 102 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld”, count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); } ࣮ߦ݁Ռ ίίϮτΦολϤʔ count: 0 count: 2

Slide 103

Slide 103 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld”, count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); } ܕਪ࿦͕Ͱ͖Δʂ
 MFUͰఆ਺Λ؆୯ʹએݴʂ

Slide 104

Slide 104 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld", count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); } ΋ͬͱ؆୯ʹϩάΛు͘Α͏ʹʂ
 ϚΫϩ͸෼ذॲཧ΋͔͚ΔͷͰ
 ඞཁ͕͋Ε͹֦ு

Slide 105

Slide 105 text

#define let __auto_type const #define var __auto_type #define dump(count) NSLog(@“count: %ld”, count) #define print() NSLog(@"ίίϮτΦολϤʔ") NSArray* Array() { return @[]; } - (instancetype)init { self = [super init]; if (self) { self.method = ^{ print(); }; } return self; } - (void)someMethod { let array = Array(); var array2 = Array(); array2 = @[@"hoge", @"fuga"]; // array = @[@"hoge", @"fuga"]; ίϯύΠϧΤϥʔ self.method(); dump(array.count); dump(array2.count); } $ݴޠͷTZOUBYΛ࢖ͬͯ ؾܰʹJOJUJBMJ[FSΛ࢖͑ΔΑ͏ʹʂ ͦͯ͠ɺ/4ϓϨϑΟοΫε΋ͱΔʂ

Slide 106

Slide 106 text

ૉఢͰ͠ΐʁ

Slide 107

Slide 107 text

Ͳ͔͜ͰΈͨ͜ͱ͋Δʁ

Slide 108

Slide 108 text

No content

Slide 109

Slide 109 text

ൃදͷ·ͱΊ ๻ͷ͔Μ͕͑ͨ࠷ڧͷ0CKFDUJWF$͸ͱͯ΋ૉ੖Β͍͠΋ͷ͕ग़དྷ্͕Γ· ͨ͠ɻ ͔͠͠ɺνʔϜͰͷ։ൃͩͱ΍͸ΓࠞཚΛট͘Մೳੑ͕େ͖͍ͷͰ࢖༻͸΍ Ί·͠ΐ͏ɻ ͪͳΈʹʮ๻ͷ͔Μ͕͑ͨ࠷ڧͷ0CKFDUJWF$ʯʹࣅͨ4XJGUͱ͍͏ݴޠͰ ࡞ͬͨϥΠϒϥϦΛ͍͔ͭ͘ެ։͍ͯ͠ΔͷͰɺΈͳ͞Μ શͯͷϦϙδτϦʹελʔ͍ͩ͘͞ IUUQTHJUIVCDPNCBOO[BJ

Slide 110

Slide 110 text

͓͠·͍a ?P?