$30 off During Our Annual Pro Sale. View Details »

いいから `!` を使え! / Shut up and use `!` !

Elvis Shi
February 26, 2021

いいから `!` を使え! / Shut up and use `!` !

Elvis Shi

February 26, 2021
Tweet

More Decks by Elvis Shi

Other Decks in Programming

Transcript

  1. ͍͍͔Β!Λ࢖͑ʂ
    f o r : 6 . & . * T X J G U

    View Slide

  2. }
    var employedBy = "YUMEMI Inc."


    var job = "iOS Tech Lead"


    var favoriteLanguage = "Swift"


    var twitter = "@lovee"


    var qiita = "lovee"


    var github = "el-hoshino"


    var additionalInfo = """


    อޢͨ͠ೣ͕ͷൃ৘ظʹಥೖͯ݁͠ߏେม


    """
    final class Me: Developable, Talkable {

    View Slide

  3. 4XJGUͰ!࢖ͬͯ·͢ʁ

    View Slide

  4. ΋ͪΖΜBool൓సҎ֎Ͱ

    View Slide

  5. 4XJGUʹ͓͚Δ!ͷओͳ࢖͍ಓ˞
    w Optionalͷڧ੍6OXSBQʢ*60ؚΉʣ
    w ܕม׵ͷڧ੍μ΢ϯΩϟετas!


    w ྫ֎ॲཧͷڧ੍ྫ֎ແࢹtry!
    ˞#PPM൓సҎ֎

    View Slide

  6. ڞ௨఺ɿϓϩάϥϜ͕

    Ϋϥογϡ͢ΔϦεΫ͕͋Δ

    View Slide

  7. !Λ࢖Θͳ͍ํ͕҆શ
    本当にそうか?

    View Slide

  8. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething() {


    let image = UIImage(named: "ImageName") ?? UIImage()


    // do something with image


    }

    View Slide

  9. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething() {


    guard let appDelegate = UIApplication


    .shared.delegate as? AppDelegate else {


    return


    }


    // do something with appDelegate


    }

    View Slide

  10. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething(with data: Data) {


    do {


    let decoder = JSONDecoder()


    let response = try decoder.decode(Response.self, from: data)


    // do something with response


    } catch {


    debugPrint(error)


    return


    }


    }

    View Slide

  11. ΞϓϦ͕Ϋϥογϡ͠ͳ͍͔Βɺ

    ҆શɻ

    View Slide

  12. ΞϓϦ͕Ϋϥογϡ͠ͳ͍͔Βɺ

    ҆શʜͳͷ͔ʁ

    View Slide

  13. ͦ΋ͦ΋ɺ҆શͬͯɺͳʹʁ

    View Slide

  14. ੲɺ0CK$͔Β4XJGUʹҠߦͨ࣌͠ͷ࿩˞
    w αʔό͔Βը૾σʔλͱදࣔαΠζΛऔಘ͢Δॲཧ͕͋ͬͨ
    w αΠζσʔλ͸෯ߴͦ͞ΕͧΕ0CK$ͷίʔυͰintValueͰऔಘͯͨ͠
    w 4XJGUԽ͢Δͱ͖͸Կ΋ߟ͑ͣʹas? Int ?? 0Ͱॲཧͯͨ͠
    w ϦϦʔεޙɺҰ෦ͷը૾ͷΈΞεϖΫτൺ͕มΘͬͯ͠·ͬͨࣄ͕݅ൃੜ
    w ௐࠪͨ͠Βɺαʔό͔Βؼ͖ͬͯͨσʔλ͕ͳ͔ͥจࣈྻσʔλͩͬͨͨ
    Ίɺ0CK$͸ࣗಈม׵ͯ͘͠Ε͕ͨ4XJGU͸ܕʹݫ͍ͨ͠Ίࣗಈม׵ͯ͘͠
    Εͣɺ?? 0ʹΑͬͯ0͕୅ೖ͞Εͨ
    w ෯0ߴ͞0ͷ৔߹͸σϑΥϧταΠζͰදࣔ͢Δॲཧ͕͋ͬͨͨΊɺςε
    τσʔλͰಈ࡞֬ೝ͢Δͱ͖͸શ͘ؾ͔ͮͳ͔ͬͨ
    ˞࣮࿩Ͱ͢

    View Slide

  15. Ϋϥογϡ͸͠ͳ͔͕ͬͨɺ

    !Λආ͚Δ͋·Γɺ

    ٯʹόάͷൃݟΛ஗Βͤͨ

    View Slide

  16. ʮ҆શʯͳιʔείʔυ͸ɺ
    όάΛຊ൪ϦϦʔεલʹ

    ؾ͔ͮͤΔ΂͖ɻ

    View Slide

  17. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething() {


    let image = UIImage(named: "ImageName") ?? UIImage()


    // do something with image


    }

    View Slide

  18. ͜ͷίʔυͷํ͕ɺ҆શ
    func doSomething() {


    let image = UIImage(named: "ImageName")!


    // do something with image


    }
    όϯυϧʹೖͬͯͳ͍ͱ͍͚ͳ͍͸ͣͷ

    ը૾Ϧιʔε͔ͩΒɺ
    ສ͕Ұೖͬͯͳ͔ͬͨΒͦΕ͸όάͳͷͰ
    ಈ࡞֬ೝͰΫϥογϡͯ͘͠Εͨํ͕

    ؾ෇͖΍͍͢

    View Slide

  19. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething() {


    guard let appDelegate = UIApplication


    .shared.delegate as? AppDelegate else {


    return


    }


    // do something with appDelegate


    }

    View Slide

  20. ͜ͷίʔυͷํ͕ɺ҆શ
    func doSomething() {


    let appDelegate = UIApplication.shared.delegate as! AppDelegate


    // do something with appDelegate


    }
    ϓϩδΣΫτͷ࡞Γ͕

    ͜ͷΑ͏ʹͳͬͯΔ͸ͣͳͷͰɺ
    ສ͕Ұ͜ΕͰμ΢ϯΩϟετͰ͖ͳ͔ͬͨΒ
    ઈରϓϩάϥϜ͕Կ͔ؒҧͬͯΔ͸͔ͣͩΒɺ
    ಈ࡞֬ೝͰΫϥογϡͯ͘͠Εͨํ͕
    ؾ෇͖΍͍͢

    View Slide

  21. !Λ࢖͏΂͖ॴͰ࢖ͬͨํ͕ɺ
    όάͷૣظൃݟʹͭͳ͕Γɺ
    Ή͠Ζ҆қͳѲΓ௵͠ΑΓ҆શɻ

    View Slide

  22. ౰વɺཚ༻ͯ͠͸͍͚ͳ͍ɻ

    View Slide

  23. ͜ͷίʔυͬͯɺ҆શʁ
    func doSomething(with data: Data) {


    do {


    let decoder = JSONDecoder()


    let response = try decoder.decode(Response.self, from: data)


    // do something with response


    } catch {


    debugPrint(error)


    return


    }


    }

    View Slide

  24. ͜ͷίʔυͷํ͕ɺ҆શ
    func doSomething(with data: Data) {


    do {


    let decoder = JSONDecoder()


    let response = try decoder.decode(Response.self, from: data)


    // do something with response


    } catch {


    assertionFailure("\(error)")


    return


    }


    } ԾʹαʔόͷσʔλͱҰக͠ͳ͔ͬͨΒ
    BTTFSUJPO'BJMVSFʹΑͬͯ
    σόοάϏϧυ͚ͩΫϥογϡͯ͠

    όάΛૣظൃݟ͠ɺ
    ຊ൪ͷϦϦʔεϏϧυʹ͸Өڹͳ͠ɻ
    ʢ΋ͪΖΜ͜͜ͰߋʹΤϥʔΞϥʔτΛ

    Ϣʔβʹදࣔͤͨ͞Βͳ͓ྑ͠ʣ

    View Slide

  25. ͜ͷίʔυ͸ɺ͕͢͞ʹ҆શͰ͸ͳ͍
    func doSomething(with data: Data) {


    let decoder = JSONDecoder()


    let response = try! decoder.decode(Response.self, from: data)


    // do something with response


    }
    ສ͕Ұαʔόଆ͕όάΛى͜Γ

    ຊདྷͷ࢓༷ͱ͸ҧ͏ܕͷϨεϙϯε͕

    ؼ͖ͬͯͨΒ

    ΞϓϦ͕ଈΫϥογϡ͢ΔͷͰ

    ྲྀੴʹྑ͘ͳ͍

    View Slide

  26. 5*14ᶃ
    w ͦΕͰ΋΍͸ΓͲ͏ͯ͠΋ຊ൪ϦϦʔεͰΫϥογϡ
    ͯ͠ཉ͘͠ͳ͍ɻԿ͔ํ๏͋Δʁ
    w assertionFailureΛ࢖͑͹ɺσόοάϏϧυͩ
    ͚ΫϥογϡͰ͖ΔͷͰɺͥͻ׆༻͠·͠ΐ͏ɻ
    w ྫɿ
    let image = UIImage(named: "ImageName") ?? {


    assertionFailure("ImageName not found")


    return UIImage()


    }()

    View Slide

  27. 5*14ᶄ
    w ଞʹ΋Ͳ͔͜ੵۃతʹ!Λ࢖ͬͨํ͕৔໘͋Δʁ
    w ςετίʔυ΋Ή͠ΖੵۃతʹόάΛؾ෇͖͍ͨ͠
    ຊ൪ΞϓϦʹҰ੾Өڹ͠ͳ͍ͷͰɺੵۃతʹ!Λ࢖
    ͑Δ͜ͱ͕ଟ͍Ͱ͢ɻ
    w ͨͩ͠Ϋϥογϡ͢Δͱޙଓͷίʔυ΋ಈ͔ͳ͘
    ͳΔͷͰɺ৔ॴʹΑͬͯ͸XCTFailΛ࢖ͬͨํ
    ͕͍͍͜ͱ΋͋Γ·͢
    w 1MBZHSPVOEͱ͔ͷຊ൪ΞϓϦؔ܎ͳࣗ͘෼Ͱखܰ
    ͳಈ࡞֬ೝ͍ͨ࣌͠΋΋ͪΖΜੵۃతʹ࢖ͬͯΑ͠

    View Slide

  28. !Λա౓ʹڪΕͣʹ
    ͏·͘׆༻ͯ͠
    όάΛૣظʹ௵͠·͠ΐ͏

    View Slide