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

Swiftを知って欲しい

2c2a476874ecf6038b1eecf097daec0d?s=47 kntk
March 21, 2020

 Swiftを知って欲しい

2c2a476874ecf6038b1eecf097daec0d?s=128

kntk

March 21, 2020
Tweet

Other Decks in Programming

Transcript

  1. Swiftを知って欲しい @kntk Swift を知って欲しい

  2. $ ./intro/aMonthAgo 1ヶ月前 (勢いで)開発勉強会で発表しようと 思った Swift を知って欲しい

  3. $ ./intro/aWeekAgo 1週間前 発表内容が思いつかないがまだ焦る時期 じゃない Swift を知って欲しい

  4. $ ./intro/yabai 先週末 発表できることない... Swift を知って欲しい

  5. $ ./intro/theme プログラミング学びたてだからこそ できる発表があるのかも...? Swift を知って欲しい

  6. $ ./intro/theme2 Swiftの基本的(だけど重要)な内容を 紹介したらどうだろう Swift を知って欲しい

  7. $ cat ./intro/slide_theme Swiftを知って欲しい Swift を知って欲しい

  8. $ cat ./intro/aim 達成目標(?) Swift を知らない方に、Swift を知ってもらう Swift を知っている方に、初学者目線の Swift

    を知ってもらう Swift を知って欲しい
  9. $ ./main それでは本題 Swift を知って欲しい

  10. $ ./before の前に... Swift を知って欲しい

  11. $ cat ./disclaimer 利用規約・免責事項 第 1 条 (適用) 本規約はこのスライド及び発表を見た全ての方と 私・kntk(以下、当方とします)

    との間のスライド 及び発表に関わる一切の関係に適用されるものと します。 第 2 条 (免責事項) このスライド及び、発表の際に当方が発言した内 容は全て個人的な見解であり、正しい情報である とは限りません。 また、このスライドに記載されている内容を参 考・引用したことによって生じた損失は一切責任 Swift を知って欲しい
  12. $ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる

    C 系統最新言語 (?) Swift を知って欲しい
  13. $ ./variables Swift let pi = 3.14 // 定 数

    var money = 5000 // 変 数 Swift を知って欲しい
  14. $ ./variables Swift let pi = 3.14 // 定 数

    var money = 5000 // 変 数 JavaScript const pi = 3.14; // 定 数 let money = 5000; // 変 数 Swift を知って欲しい
  15. $ ./suddenly 突然ですが Swift を知って欲しい

  16. $ ./question 問題です Swift を知って欲しい

  17. $ echo ”Can you read the next program?” 次のプログラムの出力は どうなるでしょう?

    Swift を知って欲しい
  18. $ cat ./question_variable.swift Swift var numbers = [1, 2, 3]

    var copy = numbers // コ ピ ー 元 に 要 素 を 追 加 numbers.append(4) print("numbers: \(numbers)") print("copy: \(copy)") Swift を知って欲しい
  19. $ cat ./question_variable.js JavaScript let numbers = [1, 2, 3];

    let copy = numbers; // コ ピ ー 元 に 要 素 を 追 加 numbers.push(4); console.log(`numbers: ${numbers}`); console.log(`copy: ${copy}`); Swift を知って欲しい
  20. $ ./choice_question_variable 1 numbers だけ変わる numbers: [1, 2, 3, 4]

    copy: [1, 2, 3] 2 両方変わる numbers: [1, 2, 3, 4] copy: [1, 2, 3, 4] Swift を知って欲しい
  21. $ ./answer_question_variable JavaScript: 2 両方変わる Swift を知って欲しい

  22. $ ./answer_question_variable Swift: 1 numbersだけ変わる Swift を知って欲しい

  23. $ ./why? Swiftのコレクションは値型 Swift を知って欲しい

  24. $ ./why? Swiftのコレクションは値型 参照型のclassと値型のstructが 存在 Swift を知って欲しい

  25. $ ./in_addition ちなみに... Copy-On-Writeと言う仕組みで 「値が最初に変更される直前」にコピー var numbers = [1, 2,

    3] var copy = numbers print(&numbers == &copy) // true numbers.append(4) print(&numbers == &copy) // false ※本当は&numbers ではなく UnsafePointer(numbers) Swift を知って欲しい
  26. $ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 Swift を知って欲しい

  27. $ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 UIKitは参照型だけど... SwiftUIではList,

    Text, Buttonなど ほとんどのコンポーネントが値型 Swift を知って欲しい
  28. $ man struct 全部が全部値型で記述すればOK!! と言うわけではなく... 使い分けは必要! 参照型/値型のどちらでも良い時は値型で書くことが多い (?) Swift を知って欲しい

  29. $ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる

    C 系統最新言語 (?) 値型中心の言語 Swift を知って欲しい
  30. $ cat ./reference Heart of Swift https://heart-of-swift.github.io/ Swift での Copy

    on Write の実装方法の解説 https://qiita.com/omochimetaru/items/ f32d81eaa4e9750293cd Swift の実行コード (paiza.io) https://paiza.io/projects/ 6BqzTRcZuDkmnMvbFU0_LA JavaScript の実行コード (paiza.io) https://paiza.io/projects/ RTuufgFaCDV9pMQhrKO7Vg Swift を知って欲しい
  31. $ ./next 次のテーマ Swift を知って欲しい

  32. $ ./suddenly2 突然ですが Swift を知って欲しい

  33. $ ./question2 質問です Swift を知って欲しい

  34. $ echo ”Do you know ’checkException’?” 「検査例外」って知ってますか? Swift を知って欲しい

  35. $ ./evil_language_java? †魔の言語Java† にも有ったアレ? Swift を知って欲しい

  36. $ man checkException // エ ラ ー が 起 き

    な い 関 数 func safetyProcess() // エ ラ ー が 起 き る 可 能 性 の あ る 関 数 func unsafetyProcess() throws Swift を知って欲しい
  37. $ man checkException throws が着いた関数内でしか例外を投げれない func safetyProcess() { // コ

    ン パ イ ル エ ラ ー throw SafetyDakedoError() } func unsafetyProcess() throws { let data = ... if data.isEmpty { // 関 数 に throws が 着 い て い る の で OK throw DataIsEmptyError() } } Swift を知って欲しい
  38. $ man checkException throws が着いた関数は「throws が着いた関数内」 または「do-catch 文の中」でしか呼び出せない func safetyProcess()

    { // コ ン パ イ ル エ ラ ー unsafetyProcess() do { try unsafetyProcess() } catch { print(error) } } func unsafetyProcess() throws { try unsafetySomething() } Swift を知って欲しい
  39. $ man checkException throws が着いた関数は呼び出す際に try を付けな ければいけない func safetyProcess()

    { do { // コ ン パ イ ル エ ラ ー unsafetySomething() // OK try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
  40. $ cat ./checkexception_conclusion 検査例外のルール throws が着いた関数内でしか例外を投げれない throws が着いた関数は「throws が着いた関数内」また は「do-catch

    文の中」でしか呼び出せない throws が着いた関数は呼び出す際に try を付けなけれ ばいけない Swift を知って欲しい
  41. $ ./what_is_good 何が良いの? Swift を知って欲しい

  42. $ ./pro1 throws が着いた関数は 「throws が着いた関数内」または 「do-catch 文の中」でしか呼び出せない 例外処理を強制することができる =例外処理をし忘れてクラッシュすることがない

    func safetyProcess() { do { try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
  43. $ ./pro2 throws が着いた関数は呼び出す際に try を付 けなければいけない 例外が発生する箇所がわかりやすい func safetyProcess()

    { do { try unsafetyProcess() safetySomething() try unsafetySomething() } catch { print(error) } } Swift を知って欲しい
  44. $ ./con? 関数側では throw するしかないけど 無視したい/ちゃんとやれば起こるはずのない例 外もあるじゃん それを毎回... func safetyProcess()

    { do { try almostSafetyProcess() } catch { print(error) } } Swift を知って欲しい
  45. $ ./pro3 try!, try?演算子を使うことで無視が可能 do-catch 文, throws が不要になる func safetyProcess()

    { // throw さ れ た 場 合 は ア プ リ が 落 ち る try! almostSafetyProcess() // throw さ れ た 場 合 は nil(null) が 帰 る try? almostSafetyProcess() } Swift を知って欲しい
  46. $ ./pro 検査例外のメリット 例外処理を強制することができる 例外が発生する箇所がわかりやすい ハンドリングの必要がない箇所は簡単に無視 ができる Swift を知って欲しい

  47. $ ./in_addition2 さらに... SwiftにはOptional(null安全)の機構 が備わっている Swift を知って欲しい

  48. $ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! Swift を知って欲しい

  49. $ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! 「!を付けなければ基本落ちないから大丈夫」 try! hoge! Swift を知って欲しい

  50. $ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる

    C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
  51. $ cat ./reference Swift のエラーハンドリングはなぜ最先端な のか https://qiita.com/omochimetaru/items/ c30f7a021fb9b8f0fa92 Swift はどのように

    Java の検査例外を改善し たか https://qiita.com/koher/items/ e4c1d88981291c35d571 Swift を知って欲しい
  52. $ cat ./overview Swiftを知っていただけたでしょうか? Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に

    使われる C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
  53. $ ./p.s. このスライドは LaTeX で Beamer と言うスライド 作成用ドキュメントを使って作っています Swift を知って欲しい

  54. $ ./p.p.s. C0de では新入生向けに† Java †を 1 から教える 授業を開催しています! Swift

    を知って欲しい