Slide 1

Slide 1 text

SwiftϓϩάϥϚͷͨΊͷ ࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ ΋ͬ͞ΓΞϓϦΛαΫαΫʹ͢ΔͨΊͷجຊͷʮΩʯ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 1

Slide 2

Slide 2 text

ࣗݾ঺հ • ౻ຊঘ๜ (53ࡀɺ1964ੜ) • ϑϦʔϥϯεϓϩάϥϚ • fhisa (Twitter, GitHub ͳͲ) • RubyCocoa(2001-), SwiftyLayout(2015-) • Cocoaษڧձ (Bukuro.swiftɺؔ౦swiftษڧձ) SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 2

Slide 3

Slide 3 text

ΞδΣϯμ • ܭࢉྔ௒ೖ໳ • Swift Standard Library ͱܭࢉྔ • ·ͱΊ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 3

Slide 4

Slide 4 text

ܭࢉྔ௒ೖ໳ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 4

Slide 5

Slide 5 text

ܭࢉྔ௒ೖ໳ Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection. — countϓϩύςΟͷυΩϡϝϯτΑΓൈਮ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 5

Slide 6

Slide 6 text

ܭࢉྔ௒ೖ໳ Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection. O(1) ΍ O(n) ͸ʮܭࢉྔʯ ΞϧΰϦζϜͷෳࡶ͞Λද͢ࢦඪ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 6

Slide 7

Slide 7 text

ΞϧΰϦζϜͱ͸ʁ ໰୊Λղͨ͘Ίͷखॱ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 7

Slide 8

Slide 8 text

ΞϧΰϦζϜͱ͸ʁ • ୔ࢁͷσʔλ͔ΒಛఆσʔλΛݟ͚ͭΔํ๏ (ೋ෼୳ࡧͳͲ) • ୔ࢁͷσʔλΛॱʹฒ΂Δํ๏ (ϚʔδιʔτͳͲ) • ࠷େެ໿਺ΛٻΊΔํ๏ (ϢʔΫϦουͷޓআ๏) • ύζϧΛղ͘ํ๏ (ϋϊΠͷౝͳͲ) SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 8

Slide 9

Slide 9 text

ܭࢉྔ(Complexity)ͱ͸ʁ ͋ΔΞϧΰϦζϜΛ࣮ߦ͢Δͱ͖ɺೖྗͷେ͖͞ʹରͯ͠ɺͲͷ ͘Β͍ͷ࣌ؒ·ͨ͸(ϝϞϦʔ)ۭ͕ؒඞཁ͔Λද͢ࢦඪɾ໨҆ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 9

Slide 10

Slide 10 text

ܭࢉྔ͸໨҆ • ͬ͘͟Γͱݟੵ΋Δ͜ͱ͕ॏཁ • ਖ਼֬ʹ஋Λܭࢉ͢Δ΋ͷͰ͸ͳ͍ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 10

Slide 11

Slide 11 text

࣌ؒܭࢉྔͱۭؒܭࢉྔ • ࣌ؒܭࢉྔ (Time complexity) ʹ ඞཁͳ࣌ؒͷ໨҆ • ۭؒܭࢉྔ (Space complexity) ʹ ඞཁͳϝϞϦʔۭؒͷ໨҆ ࣮ࡍʹ͸୯ʹʮܭࢉྔʯͱදݱ͞ΕΔ͜ͱ͕ଟ͍ɻ ͦͷ৔߹ʮ࣌ؒܭࢉྔʯͷ͜ͱΛࢦ͢ɻ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 11

Slide 12

Slide 12 text

O(1) ܭࢉྔ ʹ ೖྗͷେ͖͞ʹؔ܎ͳ͘Ұఆ (ྫ) ഑ྻͷ n ൪໨ͷཁૉ΁ͷΞΫηε SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 12

Slide 13

Slide 13 text

O(n) ܭࢉྔ ʹ ೖྗͷେ͖͞ʹൺྫ (ྫ) ഑ྻͷ࠷ॳ͔Β n ൪໨·Ͱͷશͯͷσʔλʹॱ൪ʹΞΫηε SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 13

Slide 14

Slide 14 text

Α͋͘Δܭࢉྔ ܭࢉྔ (Oه๏) SwiftυΩϡϝϯτ O(1) ○ O(n) ○ O(log n) × ೋ෼୳ࡧͳͲ O(n log n) × ϚʔδιʔτͳͲͷฒ ΂ସ͑ΞϧΰϦζϜ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 14

Slide 15

Slide 15 text

SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 15

Slide 16

Slide 16 text

Swift Standard Library ͱܭࢉྔ https://developer.apple.com/documentation/swift SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 16

Slide 17

Slide 17 text

Swift Standard Library ͱܭࢉྔ ίϨΫγϣϯʹؔ͢ΔυΩϡϝϯτͷཁॴཁॴͰɺ ܭࢉྔʹ͍ͭͯͷهड़͕͋Δɻ ഑ྻ(Array)ɺࣙॻ(Dictionary)ɺू߹(Set)ͳͲ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 17

Slide 18

Slide 18 text

Swift Standard Library ͱܭࢉྔ υΩϡϝϯτʹग़ݱ͢Δ༻ޠ O(1), O(n) O(m), O(n + m) 2ͭͷίϨΫγϣϯ͕བྷΉܭࢉ Complexity ܭࢉྔ Amortized (complexity) ۉ͠(ܭࢉྔ) SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 18

Slide 19

Slide 19 text

Sequence ϓϩτίϧ • ͦΕͧΕͷཁૉʹ܁Γฦ͠ΞΫηεͰ͖ΔܕΛఏڙ • for i in γʔέϯε { ... } • filter, map, reduce ͳͲͷϝιουΛ࣮૷ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 19

Slide 20

Slide 20 text

Sequence ϓϩτίϧ Expected Performance: A sequence should provide its iterator in O(1). The Sequence protocol makes no other requirements about element access, so routines that traverse a sequence should be considered O(n) unless documented otherwise.1 • γʔέϯε͸ɺཁૉͷ܁Γฦ͠Λ O(1) Ͱఏڙ͢΂͖ • ཁૉΛॱʹͨͲΔॲཧͷܭࢉྔ͸ O(n) 1 https://developer.apple.com/documentation/swift/sequence SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 20

Slide 21

Slide 21 text

countϓϩύςΟ Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection.2 ʮίϨΫγϣϯ͕ RandomAccessCollection ϓϩτίϧʹ४ڌ͠ ͍ͯΔ৔߹͸ O(1)ɺͦͷଞͷ৔߹͸ O(n)ʯ 2 https://developer.apple.com/documentation/swift/collection/2885508-count SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 21

Slide 22

Slide 22 text

countϓϩύςΟ Discussion: To check whether a collection is empty, use its isEmpty property instead of comparing count to zero. Unless the collection guarantees random-access performance, calculating count can be an O(n) operation.2 ʮίϨΫγϣϯ͕ۭ͔Ͳ͏͔ௐ΂ΔͨΊʹ͸ɺcount Λθϩͱൺ ֱ͢ΔͷͰ͸ͳ͘ɺisEmpty ϓϩύςΟΛ࢖͍ͳ͍͞ʯ 2 https://developer.apple.com/documentation/swift/collection/2885508-count SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 22

Slide 23

Slide 23 text

isEmptyϓϩύςΟ Complexity: O(1)3 3 https://developer.apple.com/documentation/swift/collection/2886121-isempty SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 23

Slide 24

Slide 24 text

isEmptyϓϩύςΟ Discussion: When you need to check whether your collection is empty, use the isEmpty property instead of checking that the count property is equal to zero. ... 3 ʮίϨΫγϣϯ͕ۭ͔Ͳ͏͔ௐ΂ΔͨΊʹ͸ɺcount Λθϩͱൺ ֱ͢ΔͷͰ͸ͳ͘ɺisEmpty ϓϩύςΟΛ࢖͍ͳ͍͞ʯ 3 https://developer.apple.com/documentation/swift/collection/2886121-isempty SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 24

Slide 25

Slide 25 text

ۉ͠ܭࢉྔ (Amortized complexity) ۉ͠ܭࢉྔ = ܭࢉྔͷฏۉ ࠷ѱͷܭࢉྔ͚ͩΛݟΔͷ͕൵؍తʹա͗Δͱ͖ʹɺ ܭࢉྔͷฏۉΛݟΔ4 4 ʮಈత഑ྻ΁ͷ௥Ճίετ͸ͳͥ O(1)?ʯ: http://chasen.org/~taku/blog/archives/2007/02/_o1.html SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 25

Slide 26

Slide 26 text

appendϝιου Complexity: Amortized O(1) over many additions. ... 5 Swift ͷArrayܕͷΑ͏ʹ ༰ྔΛഒʑ(ࢦ਺త)ʹ૿΍͍ͯ͘͠ಈత഑ྻͷ ʮۉ͠ܭࢉྔʯ͸ O(1) 4 6 6 reserveCapacity: https://developer.apple.com/documentation/swift/array/1538966-reservecapacity 4 ʮಈత഑ྻ΁ͷ௥Ճίετ͸ͳͥ O(1)?ʯ: http://chasen.org/~taku/blog/archives/2007/02/_o1.html 5 https://developer.apple.com/documentation/swift/array/1538872-append SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 26

Slide 27

Slide 27 text

·ͱΊ • ܭࢉྔ ʹ ΞϧΰϦζϜͷ࣮ߦʹඞཁͳ࣌ؒɾۭؒͷ໨҆ • O(1) ʹ ೖྗʹΑΒͣɺܭࢉྔ͕Ұఆ • O(n) ʹ ೖྗʹൺྫͯ͠ɺܭࢉྔ͕૿Ճ • `Swift ͷυΩϡϝϯτͷܭࢉྔʹ͍ͭͯͷهड़ʹ໨Λ௨ͦ͏ • ܭࢉྔʹؾΛ࢖ͬͯɺ͘͘͞͞ಈ͘ΞϓϦΛ࡞Ζ͏ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 27

Slide 28

Slide 28 text

·ͱΊ • ܭࢉྔ ʹ ΞϧΰϦζϜͷ࣮ߦʹඞཁͳ࣌ؒɾۭؒͷ໨҆ • O(1) ʹ ೖྗʹΑΒͣɺܭࢉྔ͕Ұఆ • O(n) ʹ ೖྗʹൺྫͯ͠ɺܭࢉྔ͕૿Ճ • `Swift ͷυΩϡϝϯτͷܭࢉྔʹ͍ͭͯͷهड़ʹ໨Λ௨ͦ͏ • ܭࢉྔʹؾΛ࢖ͬͯɺ͘͘͞͞ಈ͘ΞϓϦΛ࡞Ζ͏ SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 28

Slide 29

Slide 29 text

͝੩ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ !! iOSDC JAPAN 2017 ָ͠Έ·͠ΐ͏ !! εϥΠυ͸ͪ͜Β https://speakerdeck.com/fhisa/ swiftpuroguramafalsetamefalsejin-sarawen-kenaiji-suan-liang- falsehua SwiftϓϩάϥϚͷͨΊͷࠓ͞Βฉ͚ͳ͍ܭࢉྔͷ࿩ / iOSDC Japan 2017 / © Hisakuni Fujimoto, 2017 29