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

Mobile Programming Struct

yuichiro_takahashi
December 09, 2018
120

Mobile Programming Struct

Mobile Programmingの授業で使うスライドです

yuichiro_takahashi

December 09, 2018
Tweet

Transcript

  1. ߏ଄ମ
    MOBILE PROGRAMMING 10TH DEC

    View Slide

  2. 1. ߏ଄ମͬͯ?

    View Slide

  3. ςΩετ
    ߏ଄ମͱ͸ʁ
    ▸ Class ͱࣅͨΑ͏ͳ΋ͷͰϝιου΍ϓϩύςΟΛ࣋ͭ
    ▸ Classͱಉ͡Α͏ʹఆٛͨ͠ޙΠϯελϯεԽͯ͠࢖͏
    ▸ class Ωʔϫʔυͷ୅ΘΓʹ struct Λ࢖͏
    ▸ ୯७ͳσʔλͳͲΛอ͓࣋ͯͨ͘͠Ίʹ࢖͏

    View Slide

  4. ςΩετ
    ࣮ࡍͷίʔυ
    // structͷఆٛ
    struct Pokemon {
    let name: String
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    }
    // ΠϯελϯεԽ
    let pikachu = Pokemon(name: "ϐΧνϡ΢", level: 100)
    // ϝιουݺͼग़͠
    pikachu.displayStatus()

    View Slide

  5. ͺͬͱݟCLASSͱಉ͡
    Α͏͕ͩɾɾɾ

    View Slide

  6. ࣮͸৭ʑͳͱ͜
    Ζ͕ҧ͏ʂ

    View Slide

  7. 2. CLASSͱSTRUCT
    ͷҧ͍

    View Slide

  8. ςΩετ
    จ๏͸΄ͱΜͲಉ͚ͩ͡ͲͲ͕͜ҧ͏ʁ
    ▸ Class͸ՄมɺStruct͸ෆมͰ͋Δ͜ͱ
    ▸ Struct͸ଞͷStructΛܧঝͰ͖ͳ͍
    ▸ Class͸ࢀরܕɺStruct͸஋ܕ

    View Slide

  9. 2-1.ෆมͱՄม

    View Slide

  10. ςΩετ
    ෆมʁՄมʁ
    ▸ ͖ͬ͞ͷεϥΠυʹ΋ॻ͍ͨ௨ΓClass͸ՄมɺStruct͸ෆมͰ͢
    ▸ จࣈ௨ΓมߋͰ͖Δ͔Ͱ͖ͳ͍͔ͱ͍͏͜ͱͰ͕͢
    ▸ ୺తʹݴͬͯ͠·͑͹ΦϒδΣΫτͷϓϩύςΟΛॻ͖׵͑Δ͜
    ͱ͕Ͱ͖Δ͔(ঢ়ଶΛมԽͤ͞ΒΕΔ͔)ͱ͍͏͜ͱͰ͢
    ▸ ӳޠͰ͸ՄมΛ Mutable, ෆมΛ Immutable ͱݺͼ·͢
    ▸ Class͸ϓϩύςΟΛॻ͖׵͑Δ͜ͱ͕Ͱ͖·͕͢Struct͸ෆมͳ
    ͷͰجຊతʹॻ͖׵͑Δ͜ͱ͕Ͱ͖·ͤΜ

    View Slide

  11. ςΩετ
    ࣮ࡍͷίʔυ
    ▸ ௕͘ͳΔͷͰXcodeࢀর

    View Slide

  12. ςΩετ
    Ͳ͏ͯ͠΋STRUCTΛՄมʹ͍ͨ͠ͱ͖͸ʁ
    ▸ جຊతʹStruct͸ෆมͰ͋ΓมߋෆՄͰ͢
    ▸ ຊདྷ͸ͦͷΑ͏ʹѻ͏΂͖Ͱ͕ͨ͢·ʹͲ͏ͯ͠΋Մมʹ͠
    ͍͕ͨ࣌͋Γ·͢
    ▸ ͦ͏͍͏ͱ͖͸ϝιουʹmutatingΩʔϫʔυΛ͚ͭΔ͜
    ͱͰՄมʹ͢Δ͜ͱ͕Ͱ͖·͢
    ▸ ·ͨstructΛΠϯελϯεԽ͢Δࡍʹ͸ΠϯελϯεΛೖΕ
    Δม਺Λ var Ͱఆ͓ٛͯ͘͠ඞཁ͕͋Γ·͢

    View Slide

  13. ςΩετ
    ࣮ࡍͷίʔυ
    // structͷఆٛ
    struct Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    // mutating Λ͚ͭΔ͜ͱͰ
    // ͜ͷϝιουͷதͰͷΈpropertyΛॻ͖׵͑Մೳ
    mutating func takeDamage(from ability: Ability) {
    self.health -= ability.damage
    }
    }
    // ΠϯελϯεԽ
    let ability = Ability(name: "ϘϧοςΧʔ", damage: 120)
    let ability2 = Ability(name: "΅͏;͏", damage: 120)
    // Մมʹ͍ͨ͠Struct͸varͰఆٛ͢Δ
    var pikachu = Pokemon(name: "ϐΧνϡ΢", ability: ability, level: 100, health: 200)
    var pidgey = Pokemon(name: "ϙοϙ", ability: ability2, level: 100, health: 200)
    pidgey.takeDamage(from: pikachu.ability)

    View Slide

  14. 2-2.ܧঝʹ͍ͭ
    ͯ

    View Slide

  15. ςΩετ
    STRUCTͬͯܧঝͲ͏ͳͷʁ
    ▸ ͖ͬ͞ͷεϥΠυʹ΋ॻ͍ͨ௨ΓStruct͸ଞͷStructΛܧঝ
    Ͱ͖·ͤΜ
    ▸ ͳͷͰෳ਺ͷStructʹಉ͡Α͏ͳػೳΛ͍࣋ͨͤͨʂͱͳͬ
    ͨ৔߹͸ProtocolΛ࢖͏͜ͱʹͳΓ·͢
    ▸ Protocolʹ͍ͭͯ͸ৄ͘͠৮Ε·ͤΜ͕લճͷϙέϞϯͷྫ
    ΛStructͱProtocolͰදݱ͢Δͱ࣍ͷΑ͏ʹͳΓ·͢

    View Slide

  16. ςΩετ
    ࣮ࡍͷίʔυ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get }
    var health: Int { get set }
    func displayStatus()
    func doAbility(with pokemon: T)
    }
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    let level: Int
    var health: Int
    func displayStatus() {
    // লུ...
    }
    func doAbility(with pokemon: T) where T : Pokemon {
    // লུ...
    }
    }

    View Slide

  17. 2-2.஋ܕͱࢀর
    ܕ

    View Slide

  18. ςΩετ
    ஋ܕʁࢀরܕʁ
    ▸ ͖ͬ͞ͷεϥΠυʹ΋ॻ͍ͨ௨ΓClass͸ࢀরܕɺStruct͸
    ஋ܕͰ͢
    ▸ ࢀরܕ͸Πϯελϯε͝ͱʹϓϩύςΟͷ಺༰Λڞ༗͠·͢
    ▸ ஋ܕ͸Πϯελϯε͕ϝιουʹ౉Δࡍʹࣗ෼ͷίϐʔΛ౉
    ͢ͷͰΠϯελϯε͝ͱʹϓϩύςΟͷ಺༰͕ڞ༗͞Ε·ͤ
    Μ

    View Slide

  19. ςΩετ
    ࣮ࡍͷίʔυ
    ▸ ௕͘ͳΔͷͰXcodeࢀর

    View Slide