Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Equatable, Comparable and Hashable

Equatable, Comparable and Hashable

Shigure Shimotori

August 08, 2017
Tweet

More Decks by Shigure Shimotori

Other Decks in Programming

Transcript

  1. Equatable / Comparable /
    Hashable
    Λ׬શʹཧղ͢Δ
    @S_Shimotori
    Otemachi.swift x Kyobashi.swift #01

    View Slide

  2. ͩΕ
    • @S_Shimotori·ͨ͸@S_Shimotori_pub
    • ֶੜ
    • DroidKaigi2016-2018ӡӦϝϯόʔ

    View Slide

  3. iOSDCʹొஃ͠·͢
    • #1349ʮARC vs. GCʁARC in GCʁʯ
    • 5෼ͰGCͷ࿩Λ͠·͢
    • ݫ͍͠
    • Reject͞Εͨ΍ͭ΋ద౰ʹڙཆ͢Δͭ΋Γ
    • ςετ
    • ԋࢉࢠ
    • Ͳ͜Ͱʁ

    View Slide

  4. Equatable
    Comparable
    Hashable

    View Slide

  5. ͓͞Β͍
    • Equatable
    • ౳͍͔͠Ͳ͏͔ൺֱͰ͖Δ
    • Comparable
    • ؔ܎ԋࢉࢠͰൺֱͰ͖Δ
    • ͍͍ͪͪൺֱ༻ͷؔ਺Λ༻ҙ͠ͳͯ͘΋ιʔτͰ͖Δ
    • Hashable
    • ϋογϡ஋Λ࡞ΕΔ
    • Map/DictionaryͷΩʔʹͳΕΔ
    • Java͸ComparableͷΈinterfaceͰ࢒Γ͸class Objectʹੜ͑ͯΔ
    • Python͸duck typing

    View Slide

  6. SwiftͰ͸:

    View Slide

  7. EquatableͱΏ͔͍ͳ஥ؒͨͪ(Ұ෦লུ)
    &RVBUBCMF
    $PNQBSBCMF )BTIBCMF /VNFSJD 4FU"MHFCSB
    4USJEFBCMF
    4USJOH1SPUPDPM 3FGFSFODF$POWFSUJCMF
    Foundation಺ͷࢀরܕ΁ଓ͘ɻ
    String͕ଓ͘ɻ
    1࣍ݩͷ࿈ଓతͳ஋ɻ
    ਺஋΍UnsafePointer͕ଓ͘ɻ
    ೋ߲ࢉज़ԋࢉɻ Set͕ଓ͘ɻ
    • ΋ͬͱ΋ਓؾͳProtocolͷ1ͭ
    • ͳʹΑΓଘࡏײ͕େ͖͍ɺେ͖͗͢Δ
    • Equatable.swiftʹ͸ͪΌ͔ͬΓಉҰ൑ఆͷ࣮૷΋͍Δ

    View Slide

  8. protocol Equatable

    View Slide

  9. ͱΓ͋͑ͣ
    == Λ࣮૷͢Ε͹OKʂ

    View Slide

  10. protocol Equatableͷཁ݅
    • ୅ସՄೳੑ
    • ൓ࣹੑ
    • ରশੑ
    • ਪҠੑ
    • a == b ͕ਅͳΒ not a != b ͕ਅ
    • ͜ͷ͏ͪEquatable͔ΒϑΥϩʔ͕ೖΔͷ͸࠷ޙ͚ͩʂ
    • ҙਤతʹΦʔόʔϥΠυ͠ͳ͍ݶΓ==ͷٯͷ݁ՌΛฦ͢

    View Slide

  11. OptionalͱEquatableͷؔ܎
    • Optional͸EquatableͰ͸ͳ͍
    • Ͱ΋is Equatableͷ݁Ռ͸த਎ʹґଘ͢Δ
    • Ͱ΋ผͰԋࢉࢠ͕࣮૷͞Ε͍ͯΔͷͰnilͱͷൺֱ͸Մೳ

    View Slide

  12. protocol Comparable

    View Slide

  13. ద౰ʹ < Λ࣮૷͓͚ͯ͠͹
    ͳΜͱ͔ͳΔ΍ͭ

    View Slide

  14. protocol Comparableͷ໾ׂͱཁ݅
    • ܕʹࣗવॱং෇͚Λ༩͑Δ
    • σϑΥϧτͷιʔτํ๏ΛܾΊΔͱ͍͏͜ͱ
    • Swift͸ؔ܎ԋࢉࢠͰදݱ͍ͯ͠ΔͷͰEquatable͕ඞਢ
    • ࡶʹ࣮૷͠ͳ͍ݶΓ͸Equatableͱໃ६͠ͳ͍
    • ࡶʹ࣮૷͠ͳ͍ݶΓ͸ < = > ͷͲΕ͔1͚͕ͭͩtrueʹͳΔ
    • strict total orderingͱݺ͹ΕΔੑ࣭Λຬͨ͞ͳ͚Ε͹ͳΒͳ͍
    • ʮ͖ͬͪΓϧʔϧΛܾΊͯશһҰྻʹฒ΂ͳ͍ͱͩΊʯ
    • ුಈখ਺఺਺ͳͲͰྫ֎͕ೝΊΒΕΔ৔߹͕͋Δ

    View Slide

  15. sort͸2छྨ
    • Ҿ਺ͳ͠ͷsort / sorted
    • ࣗવॱং෇͚ʹैͬͯιʔτ͢Δ
    • ͭ·Γཁૉ͕ComparableͰͳ͚Ε͹ͳΒͳ͍
    • Ҿ਺ΛऔΔsort / sorted
    • ର৅ίϨΫγϣϯ಺ͷΈͰ௨༻͢Δॱং෇͚Ͱιʔτ͢Δ
    • ཁૉ͕ComparableͰͳͯ͘΋͍͍
    • strict weak orderingͳॱং෇͚͕ڐ͞ΕΔ
    • Comparableͱͷҧ͍͸ൺֱෆೳ͕ڐ͞ΕΔ͜ͱ
    • ͲͪΒ΋࠷ޙ͸ॱং෇͚ʹैͬͯΠϯτϩιʔτ͞ΕΔ

    View Slide

  16. protocol Hashable

    View Slide

  17. ͱΓ͋͑ͣ
    ϋογϡ஋Λग़͓͚ͯ͠͹OKʂ

    View Slide

  18. protocol Hashable
    • ϋογϡΛ࣮૷͢Δͱ͖ͷΑ͋͘Δ஫ҙ
    • ޓ͍ʹಉ஋ͳΒϋογϡ஋΋౳͘͠ͳ͚Ε͹ͳΒͳ͍
    • ٯ͸੒ཱ͠ͳͯ͘΋Α͔ͬͨΓ͢Δ
    • SwiftͰ͸EquatableඞਢͳͷͰ࣮૷Λ๨ΕΔ͜ͱ͸ͳ͍͸ͣ
    • ϧʔϧʹଇͬͯͪΌΜͱ࣮૷͢Δ͜ͱʂ

    View Slide

  19. Ҏ্ʂ

    View Slide

  20. ͓·͚

    View Slide

  21. assertEqual

    View Slide

  22. assertEqualʹ͸ݴޠͷݸੑ͕ग़Δ
    • Javaʹ͸ࢀরܕ༻ͱϓϦϛςΟϒܕ༻͕ͦΕͧΕ༻ҙ͞Ε͍ͯΔ
    • Pythonʹ͸1छྨ͔͠ͳ͍
    • Objective-C͸ΦϒδΣΫτ༻ͱεΧϥ༻͕༻ҙ͞Ε͍ͯΔ
    • Swift͸NonNull༻ͱNullable༻͕༻ҙ͞Ε͍ͯΔ
    • ࢀরܕͱ஋ܕͰͷ۠ผͰ͸ͳ͍
    • ͜ͷ2ͭ΋΄ͱΜͲҧ͍͕ͳ͍ɺ࣮࣭1छྨɻ

    View Slide

  23. ·ͱΊ

    View Slide

  24. ·ͱΊ
    • Equatable / Comparable / Hashableʹ͸ϧʔϧ͕͋Δ
    • ޓ͍ͷؔ܎ੑ͸protocolͷܧঝͰදݱ͞Ε͍ͯΔ͕ɺ
    ϧʔϧʹଇ͍ͬͯΔ͔Ͳ͏͔͸ݟͯ͘Εͳ͍
    ਖ਼࣮͘͠૷͠·͠ΐ͏ʂ
    ཧ૝Λݴ͑͹ͦͷςετ΋ཉ͘͠ͳ͍ʁ

    View Slide