Successfully reported this slideshow.

脱swift初心者するための2つのきっかけ

6

Share

1 of 45
1 of 45

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

脱swift初心者するための2つのきっかけ

  1. 1. 脱swift初心者する ための2つのきっかけ @mogmet
  2. 2. About me • twitter: @mogmet • 好物:iOS, php, MySQL, Oracle • 仕事:インフラエンジニア→iOSエンジニア→DBA • ブログ: http://mogmet.com/ • 作ったアプリたち↓
 ワンナイト人狼 for iPhone STARBUCKSHOLIC
  3. 3. 1. 関数型言語を使おう!
  4. 4. きっかけはとあるエンジニア から聞いた一言
  5. 5. いやー、swiftで書き始めたらfor文 とかマジ書かなくなったわーwwww 出典:http://jigokuno.com/eid_162.html
  6. 6. swiftは関数型もサポートした 言語
  7. 7. これを使いこなせれば脱初心者できるし、 コードもよりスマートに短くかける!!
  8. 8. filter
  9. 9. filter • 効用:配列の中から取り出したいものだけ取り 出せます。
  10. 10. filter • 例:配列の中から偶数だけ取り出してみる。
  11. 11. Before let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] var evenNumbers:[Int] = [] for number in numbers { if number % 2 == 0 { evenNumbers.append(number) } } print(evenNumbers) // [0, 2, 4, 6, 8, 10]
  12. 12. After let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let evenNumbers = numbers.filter { $0 % 2 == 0 } print(evenNumbers) // [0, 2, 4, 6, 8, 10]
  13. 13. filter • 例:もうちょっと実践編
  14. 14. before class Human { let name: String init (name: String) { self.name = name } } let humans = [ Human(name: "綾波レイ"), Human(name: "式波・アスカ・ラングレー"), Human(name: "綾波レイ") ] var ayanamis:[Human] = [] for human in humans { if human.name == "綾波レイ" { ayanamis.append(human) } } print(ayanamis.count) // 2
  15. 15. After class Human { let name: String init (name: String) { self.name = name } } let humans = [ Human(name: "綾波レイ"), Human(name: "式波・アスカ・ラングレー"), Human(name: "綾波レイ") ] let ayanamis = humans.filter { $0.name == "綾波レイ" } print(ayanamis.count) // 2
  16. 16. indexOf
  17. 17. indexOf • 効用:配列の中から指定したもののindex値を返 します
  18. 18. indexOf • 例:配列の特定の文字列の時のindex値を取り出 す。
  19. 19. Before let lineA = ["a", "i", "u"] var index = 0 for (var i = 0; i < lineA.count; i++) { if lineA[i] == "i" { index = i } } print(index) // 1
  20. 20. こんな風にもかけるけど let lineA = ["a", "i", "u"] var index = 0 for (i, v) in lineA.enumerate() { if v == "i" { index = i } } print(index) // 1
  21. 21. After let lineA = ["a", "i", "u"] if let index = lineA.indexOf("i") { print(index) // 1 }
  22. 22. map
  23. 23. map • 効用:配列の要素に対して処理ができる
  24. 24. map • 例:文字列の配列の値を使って初期化したクラ スを生成する
  25. 25. Before class Human { let name: String init (name: String) { self.name = name } } let children = ["綾波レイ", “式波・アスカ・ラングレー", "真希波・マリ・イラストリアス"] var humans:[Human] = [] for child in children { humans.append(Human(name: child)) } print(humans) // [Human, Human, Human]
  26. 26. After class Human { let name: String init (name: String) { self.name = name } } let children = ["綾波レイ", “式波・アスカ・ラングレー", "真希波・マリ・イラストリアス"] let humans = children.map { Human(name: $0) } print(humans) // [Human, Human, Human]
  27. 27. 本当はこのまま関数ネタを
 続けようと思いましたが
  28. 28. 詳しくは下記 Swiftのmap, filter, reduce(などなど) はこんな時に使う! http://qiita.com/mo_to_44/items/ cf83b22cb34921580a52
  29. 29. 2. {}を減らそう!
  30. 30. guard let
  31. 31. guard let • unwrapする時のネストを減らせる
  32. 32. func useMagic() { let maybeMagicalGirl: String? = "鹿目まどか" if let magicalGirl = maybeMagicalGirl { print(magicalGirl) // 鹿目まどか // 契約する // 変身する // 魔法を使う // 世界を変える // ... } } Before
  33. 33. {}が長すぎる!
  34. 34. func useMagic() { let maybeMagicalGirl: String? = "鹿目まどか" guard let magicalGirl = maybeMagicalGirl else { return } print(magicalGirl) // 鹿目まどか // 契約する // 変身する // 魔法を使う // 世界を変える // ... } After
  35. 35. {}内の記述量を減らせるので 見やすくなる!
  36. 36. where
  37. 37. Before func useMagicalSwordsman() { let maybeMagicalSwordsman: String? = "美樹さやか" guard let magicalSwordsman = maybeMagicalSwordsman else { return } if magicalSwordsman == "美樹さやか" { print(magicalSwordsman) // 美樹さやか // あたしってほんと...カバ } }
  38. 38. せっかく{}を減らしてもまた{} が増えている!!
  39. 39. After func useMagicalSwordsman() { let maybeMagicalSwordsman: String? = "美樹さやか" guard let magicalSwordsman = maybeMagicalSwordsman where magicalSwordsman == "美樹さやか" else { return } print(magicalSwordsman) // 美樹さやか // あたしってほんと...カバ }
  40. 40. {}を減らせるのでオススメ!
  41. 41. まとめ
  42. 42. まとめ • 関数型を使って短く書こう! • {}をどんどん減らして保守性を高めよう!
  43. 43. 御静聴ありがとうございました

×