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.

Mobile programming control_flow2

133 views

Published on

10/15日にのMobileProgrammingの授業のスライドです

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Mobile programming control_flow2

  1. 1. 制御構文2 MOBILEPROGRAMMING OCT, 15TH
  2. 2. テキスト 制御構文! ▸ ifやfor-inなど分岐や繰り返し処理を特定の文に構造化したもの ▸ プログラムの構造は 順次、選択、反復の三つに分類される ▸ これらを組み合わせてプログラミングする方法を構造化プログラ ミングと呼ぶ ▸ 今回は繰り返しの構文に絞ってやって行きます ▸ 言語によってはforやwhileという構文が存在しない(or ただのシ ンタックスシュガー)
  3. 3. 1. FOR-IN
  4. 4. テキスト FOR-IN文 ▸ 繰り返し処理をするときの基本的な構文 ▸ 構文は for <変数> in <Array or Range> { /* loop */ } ▸ 下記のforと区別するために for-inと呼ばれます ▸ for (int i = 0; i <= 10, i++) { /* loop */ } ▸ のような構文はSwift 3.0 以降廃止されました ▸ このようなfor文をC-style forと呼びます ▸ for文は特定の回数繰り返し処理をしたいというような場合によく使います
  5. 5. テキスト なんでC-STYLE FOR は消えた? ▸ 簡潔にいうとSwiftらしくないから ▸ C言語経験者以外にはわかりにくいし ▸ 初めてSwiftを学ぶ人にとっては覚えにくい ▸ インクリメント、デクリメントによる問題もあるし for (let i = 0; i <= 10; i++) { // loop... for (let j = 0; j <= 10;, i++) { print("it's a infinity loop!") } }
  6. 6. ではどうやって ループさせる?🤔
  7. 7. 1-1.RANGE
  8. 8. テキスト RANGE(範囲演算子)を使う ▸ 一番簡単なやり方 ▸ switchの時に出てきたように 0…10 として 0 ~ 10までの Sequence(Array)を作成 ▸ それをfor-inと組み合わせる // Range let range = 0...10 for number in range { print("number: (number)") }
  9. 9. テキスト FOR-IN STLIDE ▸ for-inと stlide を使用することで間隔を開けてループさせる ことができます // 0から10まで二つとびでループ for number in stride(from: 0, to: 10, by: 2) { print("number: (number)") }
  10. 10. 1-2. ARRAY
  11. 11. テキスト ARRAYを使う ▸ これも非常にオーソドックスなやり方 ▸ 定義済みのarrayに対してfor-inを使う ▸ indexでアクセスする方法に比べ Array の範囲外にアクセス してしまうことがないため安全 // Array let array = ["sunday", "monday", "tuesday", "wednsday", "thursday", "friday", "Saturday"] for number in array { print("number: (number)") }
  12. 12. 1-3.DICTIONARY
  13. 13. テキスト DICTIONARYを使う ▸ これも割とオーソドックスなやり方 ▸ 定義済みのdictionaryに対してfor-inを使う ▸ key, value の形になっているため for の引数は二つになる // Dictionary let dic = ["Animal": "Cat", "Fruit": "Banana"] for (key, value) in dic { print("key: (key)") print("value: (value)") }
  14. 14. 2. WHILE
  15. 15. テキスト WHILE文 ▸ 繰り返し処理をするときの基本的な構文 ▸ 構文は while <ループ条件> { /* loop */ } ▸ while文は特定の条件にマッチするまで繰り返し処理をした い時に使う var count = 0 var total = 0 while count < 5 { count += 1 total += count } print("count: (count) total: (total)")
  16. 16. 3. 制御転送
  17. 17. テキスト 制御転送(CONTROL TRANSFER STATEMENTS)?🤔 ▸ 制御転送(Control Transfer Statements)はプログラムの処理 ををある場所から別の場所に移す機能のこと ▸ 例えばcontinue や break, switchのfallthroughなどがある ▸ 関数のreturnや エラー処理に出てくる throw も同じ ▸ 今回はbreakとcontinueに絞ってお話をします
  18. 18. 3-1.BREAK
  19. 19. テキスト BREAK ▸ 他の言語同様Swiftにも break があります ▸ 特定の条件の時にループから抜けたい場合にbreakを使用し ます for i in 0...10 { // 11回ループさせます。 if i >= 3 { // i が 3 以上になったときに抜ける break } print(i) }
  20. 20. 3-2. CONTINUE
  21. 21. テキスト CONTINUE ▸ 他の言語同様Swiftにも continue があります ▸ 特定の条件の時に処理をスキップしたい場合はcontinueを使 用します ▸ breakとは違いloopを抜けることはありません for i in 0...10 { if i % 3 == 0 { // 3の倍数の時はスキップ continue } print(i) }
  22. 22. おまけ
  23. 23. テキスト FORやWHILEを使わない?🤔 ▸ 冒頭で少しお話した通り言語によってはforやwhileが存在し ないです ▸ ではどうやって繰り返しを表現するのでしょうか? ▸ 方法はいくつかあり一つは高階関数を使う方法 ▸ もう一つは再帰関数を使う方法です
  24. 24. おまけ: 高階関 数
  25. 25. テキスト 高階関数?🤔 ▸ 関数を引数にとったり、関数を返す関数 ▸ ややこしいので今は詳しくは説明しません ▸ 繰り返しのための有名どころでは map, や forEach などがあ ります ▸ for-inを使う方法より簡潔に書くことができます
  26. 26. テキスト たとえば?🤔 ▸ 値段のリストに対して消費税をかけた後の値段のリストを生 成する例を考えます ▸ これをfor-inで書くと次のようになります
  27. 27. テキスト ランダムに生成した数値の倍数を求める // 消費税率
 let taxRate = 0.08 // 値段のリスト let prices: [Double] = [10000, 9800, 34570, 29800, 114514] // まずは空の配列を生成 var newPrices = [Double]()
  28. 28. テキスト ランダムに生成した数値の倍数を求める // 消費税率
 let taxRate = 0.08 // 値段のリスト let prices: [Double] = [10000, 9800, 34570, 29800, 114514] // まずは空の配列を生成 var newPrices = [Double]()
 // for-inで一度配列から取り出して・・・ for price in prices { }
  29. 29. テキスト ランダムに生成した数値の倍数を求める // 消費税率
 let taxRate = 0.08 // 値段のリスト let prices: [Double] = [10000, 9800, 34570, 29800, 114514] // まずは空の配列を生成 var newPrices = [Double]()
 // for-inで一度配列から取り出して・・・ for price in prices { let newPrice = price * taxRate newPrices.append(newPrice) // また配列へ入れる! }
  30. 30. 控えめに言って 面倒😩
  31. 31. テキスト 高階関数を使った場合 ▸ 高階関数(今回はmap)を使うと次のように書くことができま す // 消費税率
 let taxRate = 0.08 // 値段のリスト let prices: [Double] = [10000, 9800, 34570, 29800, 114514]
  32. 32. テキスト 高階関数を使った場合 ▸ 高階関数(今回はmap)を使うと次のように書くことができま す // 消費税率
 let taxRate = 0.08 // 値段のリスト let prices: [Double] = [10000, 9800, 34570, 29800, 114514] let newPrices = prices.map { $0 * taxRate } // 完成!
  33. 33. 短い!😳
  34. 34. テキスト 短い!😳 ▸ 高階関数を使うととても簡潔にかけます ▸ 今回使ったmapという高階関数は配列の中身に順番に受け 取った処理を適用し、新しい配列を生成する関数です ▸ { $0 * taxRate } の部分が配列の中身全てに適用され、その結 果が新しい配列となります ▸ 高階関数を使うことで余計なコードを省き、どんな処理を したいのか?という部分に集中できます
  35. 35. ちょっと待って! (TWITTER並感)
  36. 36. そもそも関数って なんだっけ?🤔

×