Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,396 views

Published on

potatotips #26 で発表した資料です。

Published in: Engineering
  • Be the first to comment

脱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. 御静聴ありがとうございました

×