Slide 1

Slide 1 text

#VJME࣌ؒվળ 

Slide 2

Slide 2 text

খᑎ௚ਓ<0OBHJ/BPUP> w ೥݄ʹૣظೖࣾͷ৽ଔ w "8"ͷJ04ΤϯδχΞ w IUUQTHJUIVCDPNOBPUPO ࣗݾ঺հ

Slide 3

Slide 3 text

4XJGUԽ

Slide 4

Slide 4 text

#VJME͕஗͍

Slide 5

Slide 5 text

#VJME͕஗͍ w $MFBO#VJMEͰ෼ʙ෼͔͔Δ͜ͱ΋ w ։ൃ଎౓΍ϞνϕʔγϣϯʹӨڹ

Slide 6

Slide 6 text

w 9DPEF w .BD#PPL1SP 3FUJOB JODI .JE  w ()[*OUFM$PSFJ w ϝϞϦ(# ؀ڥ

Slide 7

Slide 7 text

#VJME$PNQJMF࣌ؒΛଌΔ

Slide 8

Slide 8 text

ϓϩδΣΫτͷ#VJME࣌ؒ EFGBVMUTXSJUFDPNBQQMFEU9DPEF4IPX#VJME0QFSBUJPO%VSBUJPO:&4 ˣ #VJME$PNQJMF࣌ؒΛଌΔ

Slide 9

Slide 9 text

ϑΝΠϧ΍ϝιου͝ͱͷ $PNQJMF࣌ؒ YDPEFCVJMEXPSLTQBDF"QQ/BNFYDXPSLTQBDFTDIFNF"QQ/BNFDMFBO CVJME05)&3@48*'5@'-"(49GSPOUFOEEFCVHUJNFGVODUJPOCPEJFTc HSFQ<>NTcHSFQW?<>NTcTPSUOSCVJMEUJNFUYU #VJME$PNQJMF࣌ؒΛଌΔ

Slide 10

Slide 10 text

#VJME5JNF"OBMZ[FSGPS9DPEF IUUQTHJUIVCDPN3PCFSU(VNNFTTPO#VJME5JNF"OBMZ[FSGPS9DPEF #VJME5JNF"OBMZ[FSGPS9DPEF

Slide 11

Slide 11 text

"8"ͷ1SPKFDUͰ࣮ߦ<'JMF> #VJME5JNF"OBMZ[FSGPS9DPEF

Slide 12

Slide 12 text

"8"ͷ1SPKFDUͰ࣮ߦ<.FUIPE> #VJME5JNF"OBMZ[FSGPS9DPEF

Slide 13

Slide 13 text

 HJUIVC͔Β%PXOMPBE 9DPEFͰ3VO දࣔ͞ΕͨΞϓϦʹॻ͍ͯ͋ΔखॱΛ౿Ή #VJME5JNF"OBMZ[FSGPS9DPEFͷ࢖͍ํ

Slide 14

Slide 14 text

ௐࠪର৅

Slide 15

Slide 15 text

 #VJMEઃఆ  ࣮ࡍʹ$PNQJMF͕஗͍Օॴ  ͦͷଞ ௐࠪର৅

Slide 16

Slide 16 text

ௐࠪର৅  #VJMEઃఆ  ࣮ࡍʹ$PNQJMF͕஗͍Օॴ  ͦͷଞ

Slide 17

Slide 17 text

ฒྻ$PNQJMF਺

Slide 18

Slide 18 text

ฒྻ$PNQJMF਺ ฒྻ$PNQJMF

Slide 19

Slide 19 text

ฒྻ$PNQJMF਺ ฒྻ$PNQJMF਺Λઃఆ EFGBVMUTXSJUFDPNBQQMFEU9DPEF *%&#VJME0QFSBUJPO.BY/VNCFS0G$PODVSSFOU$PNQJMF5BTLT

Slide 20

Slide 20 text

ฒྻ$PNQJMF਺ .BDͷ$PSF਺ TZTUFN@QSPpMFS41)BSEXBSF%BUB5ZQF )BSEXBSF )BSEXBSF0WFSWJFX  5PUBM/VNCFSPG$PSFT  .BDͷ$PSF਺ͱಉ͡ ฒྻ$PNQJMF਺ͩͱ଎͍ʢʁʣ ˠ

Slide 21

Slide 21 text

ฒྻ$PNQJMF਺ ฒྻ$PNQJMF਺͝ͱͷ#VJME࣌ؒ ฒྻ$PNQJMF਺ #VJME࣌ؒ           $PSF਺पลͷ஋Ͱ Ұ൪଎͍஋Λௐ΂͓ͯ͘ ˠ EFGBVMUTXSJUFDPNBQQMFEU9DPEF *%&#VJME0QFSBUJPO.BY/VNCFS0G$PODVSSFOU$PNQJMF5BTLT

Slide 22

Slide 22 text

࠷దԽઃఆ

Slide 23

Slide 23 text

࠷దԽઃఆ 5BSHFUˠ#VJME4FUUJOH ˠ"QQMF--7.4XJGU$PNQJMFSˠ0QUJNJ[BUJPO-FWFM %FCVH/POF<0>/POF<0OPOF> w ෆཁͳ࠷దԽΛආ͚Δ

Slide 24

Slide 24 text

࠷దԽઃఆ 5BSHFUˠ#VJME4FUUJOHTˠ"EE6TFS%FpOFE4FUUJOH 48*'5@8)0-&@.0%6-&@015*.*;"5*0/Λ௥Ճ %FCVH:&4

Slide 25

Slide 25 text

࠷దԽ݁Ռ #VJME5JNF 48*'5@8)0-&@.0%6-&@015*.*;"5*0/ /P :FT ࠩ෼#VJME   $MFBO#VJME   w ࠩ෼#VJME͕஗͘ͳΔ w $MFBO#VJME͕େ෯ʹ଎͘ͳΔ

Slide 26

Slide 26 text

࠷దԽ݁Ռ #VJME5JNF 48*'5@8)0-&@.0%6-&@015*.*;"5*0/ /P :FT ࠩ෼#VJME   $MFBO#VJME   w ࠩ෼#VJME͕஗͘ͳΔ w $MFBO#VJME͕େ෯ʹ଎͘ͳΔ ˠ

Slide 27

Slide 27 text

࠷దԽ݁Ռ #VJME5JNF 48*'5@8)0-&@.0%6-&@015*.*;"5*0/ /P :FT ࠩ෼#VJME   $MFBO#VJME   w ࠩ෼#VJME͕஗͘ͳΔ w $MFBO#VJME͕େ෯ʹ଎͘ͳΔ ˠ

Slide 28

Slide 28 text

w ฒྻ$PNQJMF਺Λ࠷దͳ஋ʹ͓ͯ͘͠ w %FCVH࣌ͷ0QUJNJ[BUJPO-FWFM͸
 /POF<0>/POF<0OPOF> w 48*'5@8)0-&@.0%6-&@015*.*;"5*0/Λ:&4ʹ
 ʢ9DPEF࣌఺ʣ #VJMEઃఆ·ͱΊ

Slide 29

Slide 29 text

ௐࠪର৅  #VJMEઃఆ  ࣮ࡍʹ$PNQJMF͕஗͍Օॴ  ͦͷଞ

Slide 30

Slide 30 text

$PNQJMF࣌ؒͷվળ

Slide 31

Slide 31 text

Կނ஗͍ͷ͔ʁ

Slide 32

Slide 32 text

Կނ஗͍ͷ͔ʁ ˠ͍͍ͩͨܕਪ࿦ͷ͍ͤ

Slide 33

Slide 33 text

վળ͢ΔͨΊͷྲྀΕ  ஗͍NFUIPE͔Β
 ܕ৘ใ͕଍Γͯແͦ͞͏ͳՕॴΛਪଌ  ॻ͖׵͑ͯΈΔ  ʙΛ܁Γฦ͢ $PNQJMF࣌ؒͷվળ

Slide 34

Slide 34 text

ྫ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 35

Slide 35 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 36

Slide 36 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ ஗͗͢ΔͷͰ࣮૷ΛݟΔ

Slide 37

Slide 37 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(type: SampleType, text: String?) -> String { switch type { case .type1: return "1: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type2: return "2: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type3: return "3: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type4: return "4: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type5: return "5: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") } } enum SampleType: String { case type1 = "type1" case type2 = "type2" case type3 = "type3" case type4 = "type4" case type5 = "type5" } private func generateText() -> String? { return (arc4random() % 2 == 0) ? "text" : nil }

Slide 38

Slide 38 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(type: SampleType, text: String?) -> String { switch type { case .type1: return "1: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type2: return "2: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type3: return "3: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type4: return "4: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") case .type5: return "5: Hoge " + (self.generateText() ?? "nil") + " Fuga " + type.rawValue + " " + (text ?? "nil") } } enum SampleType: String { case type1 = "type1" case type2 = "type2" case type3 = "type3" case type4 = "type4" case type5 = "type5" } private func generateText() -> String? { return (arc4random() % 2 == 0) ? "text" : nil } ˣ NT

Slide 39

Slide 39 text

ಛ௃Λ͔ͭΉ  จࣈྻΛ ԋࢉࢠͰ݁߹  </JM$PBMFTDJOH0QFSBUPS> ɹɹɹɹɹˣ ૬ੑ͕ѱ͍ͷ͔΋͠Εͳ͍ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 40

Slide 40 text

 ԋࢉࢠʹΑΔ݁߹Λ΍ΊΔ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func fastMethod1(type: SampleType, text: String?) -> String { switch type { case .type1: return "1: Hoge \(self.generateText() ?? "nil") Fuga \(type.rawValue) \(text ?? "nil")" … } }

Slide 41

Slide 41 text

 ԋࢉࢠʹΑΔ݁߹Λ΍ΊΔ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func fastMethod1(type: SampleType, text: String?) -> String { switch type { case .type1: return "1: Hoge \(self.generateText() ?? "nil") Fuga \(type.rawValue) \(text ?? "nil")" … } } NTˠNT

Slide 42

Slide 42 text

 ॲཧΛࣄલʹߦ͏ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func fastMethod2(type: SampleType, text: String?) -> String { let text = text ?? "nil" switch type { case .type1: let generatedText = self.generateText() ?? "nil" return "1: Hoge " + generatedText + " Fuga " + type.rawValue + " " + text … } }

Slide 43

Slide 43 text

 ॲཧΛࣄલʹߦ͏ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ NTˠNT func fastMethod2(type: SampleType, text: String?) -> String { let text = text ?? "nil" switch type { case .type1: let generatedText = self.generateText() ?? "nil" return "1: Hoge " + generatedText + " Fuga " + type.rawValue + " " + text … } }

Slide 44

Slide 44 text

ͳΔ΂͘ૣ͍ஈ֊Ͱ
 ܕΛ֬ఆͤ͞Δ͜ͱ͕େࣄ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 45

Slide 45 text

ྫ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 46

Slide 46 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(data: Data) { self.log(data: [ "userId": data.user?.id ?? "userId", "userName:": data.user?.name ?? "userName", "errorCodeString": "\(data.errorCode)", "description": data.description ?? "Description" ]) } struct Data { let user: User? let errorCode: Int let description: String? } struct User { let id: String? let name: String? } private func log(data: [String: Any]) { // Send log data to server } NT

Slide 47

Slide 47 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ NT ಛ௃  Ҿ਺Λ౉࣌͢௚઀%JDUJPOBSZΛੜ੒  Λ%JDUJPOBSZͷWBMVFࢦఆ࣌ʹ࢖༻ func lateMethod(data: Data) { self.log(data: [ "userId": data.user?.id ?? "userId", "userName:": data.user?.name ?? "userName", "errorCodeString": "\(data.errorCode)", "description": data.description ?? "Description" ]) } struct Data { let user: User? let errorCode: Int let description: String? } struct User { let id: String? let name: String? } private func log(data: [String: Any]) { // Send log data to server }

Slide 48

Slide 48 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func fastMethod(data: Data) { let userId = data.user?.id ?? "userId" let userName = data.user?.name ?? "userName" let errorCodeString = "\(data.errorCode)" let description = data.description ?? "Description" let data = [ "userId": userId, "userName:": userName, "errorCodeString": errorCodeString, "description": description ] self.log(data: data) } ˠ NT NT func lateMethod(data: Data) { self.log(data: [ "userId": data.user?.id ?? "userId", "userName:": data.user?.name ?? "userName", "errorCodeString": "\(data.errorCode)", "description": data.description ?? "Description" ]) } struct Data { let user: User? let errorCode: Int let description: String? } struct User { let id: String? let name: String? } private func log(data: [String: Any]) { // Send log data to server }

Slide 49

Slide 49 text

ྫ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 50

Slide 50 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(size: CGSize) -> CGSize { return CGSize( width: size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10, height: size.height) } var view1: UIView? var view2: UIView? NT

Slide 51

Slide 51 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(size: CGSize) -> CGSize { return CGSize( width: size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10, height: size.height) } var view1: UIView? var view2: UIView? NT ಛ௃  $(4J[FJOJUJBMJ[FSͷҾ਺ʹ௚઀ෳࡶͳࣜ  $('MPBUͱܕ͕ෆ໌ྎͳ਺஋ͷࠞࡏ

Slide 52

Slide 52 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ func lateMethod(size: CGSize) -> CGSize { return CGSize( width: size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10, height: size.height) } var view1: UIView? var view2: UIView? NT func fastMethod2(size: CGSize) -> CGSize { let view1Width: CGFloat = view1?.bounds.width ?? 0 let view2Width: CGFloat = view2?.bounds.width ?? 0 let newWidth: CGFloat = size.width + view1Width + view2Width + 10 return CGSize(width: newWidth, height: size.height) } ˠ NT

Slide 53

Slide 53 text

$PNQJMFSతʹ͸ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 54

Slide 54 text

size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 55

Slide 55 text

size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ $('MPBU $('MPBU

Slide 56

Slide 56 text

size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU $('MPBU $('MPBU $('MPBU $('MPBU ˣ

Slide 57

Slide 57 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU $('MPBU size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU public func +(lhs: CGFloat, rhs: CGFloat) -> CGFloat ˣ

Slide 58

Slide 58 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 public func +(lhs: CGFloat, rhs: CGFloat) -> CGFloat size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU ˣ

Slide 59

Slide 59 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 public func +(lhs: CGFloat, rhs: CGFloat) -> CGFloat ˣ

Slide 60

Slide 60 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 public func +(lhs: CGFloat, rhs: CGFloat) -> CGFloat size.width + (view1?.bounds.width ?? 0) + (view2?.bounds.width ?? 0) + 10 $('MPBU ˣ

Slide 61

Slide 61 text

$PNQJMFSͷؾ࣋ͪʹͳͬͯ ܕ৘ใΛ༩͑ͯ͋͛Δ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ

Slide 62

Slide 62 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ let newWidth: CGFloat = size.width + view1Width + view2Width + 10

Slide 63

Slide 63 text

ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ let newWidth: CGFloat = size.width + view1Width + view2Width + 10 ˣ let newWidth: CGFloat = size.width + view1Width + view2Width + 10 $('MPBU $('MPBU $('MPBU $('MPBU $('MPBU

Slide 64

Slide 64 text

w $PNQJMFS͕͙͢ਪ࿦Ͱ͖ΔΑ͏ܕ৘ใΛ༩͑Δ w ಛʹ Λ࢖͏ͱ͖͸ద੾ʹܕΛࢦఆ w ߦͰԋࢉࢠʹΑΔ݁߹Λ͗͢͠ͳ͍ w ܕਪ࿦͕଎͍ˠγϯλοΫεϋΠϥΠτ΋଎͍ w 'VODUJPOBM1SPHSBNNJOHͰى͖͕ͪͳγϯλοΫεϋΠϥΠτ͕
 ஗͍ݱ৅Λճආ͢Δ͜ͱ΋ w ͨͩ͠ʮਪ࿦͠΍͢͞ʯͱʮ4XJGUZͳίʔυʯ͸
 τϨʔυΦϑͳ͜ͱ͕ଟ͍ w ݦஶʹ஗͍ՕॴͷΈͷվળͰे෼ ܕਪ࿦ʹ͕͔͔࣌ؒΔύλʔϯ·ͱΊ

Slide 65

Slide 65 text

"8"ͰͷϏϑΥʔɾΞϑλʔ 'JMF$PNQJMF5JNF

Slide 66

Slide 66 text

"8"ͰͷϏϑΥʔɾΞϑλʔ 'JMF$PNQJMF5JNF

Slide 67

Slide 67 text

ௐࠪର৅  #VJMEઃఆ  ࣮ࡍʹ$PNQJMF͕஗͍Օॴ  ͦͷଞ

Slide 68

Slide 68 text

E4:.'JMF

Slide 69

Slide 69 text

w %FCVH4ZNCPM'JMF w $SBTIϩάΛ௥͏ҝʹඞཁ %FCVH#VJMEͰෆཁͳ৔߹͸%8"3' ˠʙඵ୹ॖ E4:.'JMF

Slide 70

Slide 70 text

#VJME%FWJDF

Slide 71

Slide 71 text

(FOFSJDJ04%FWJDFΛબ୒ͯ͠#VJME͢Δͱ஗͍ ˣ ಛʹཧ༝͕ͳ͚Ε͹࣮ػ͔4JNVMBUPSΛબ୒ #VJME%FWJDF 4JNVMBUPS (FOFSJD J04%FWJDF #VJME5JNF  

Slide 72

Slide 72 text

 ࣮ࡍʹ$PNQJMF͕஗͍Օॴ ˠ$PNQJMFSͷܕਪ࿦Λखॿ͚ͯ͋͛͠Δ  #VJMEઃఆ ˠฒྻ$PNQJMF਺ɺ࠷దԽઃఆΛݟ௚͢  ͦͷଞ ˠE4:. #VJME%FWJDF

Slide 73

Slide 73 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠