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

Swiftを知って欲しい

kntk
March 21, 2020

 Swiftを知って欲しい

kntk

March 21, 2020
Tweet

More Decks by kntk

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. $ cat ./disclaimer
    利用規約・免責事項
    第 1 条 (適用)
    本規約はこのスライド及び発表を見た全ての方と
    私・kntk(以下、当方とします) との間のスライド
    及び発表に関わる一切の関係に適用されるものと
    します。
    第 2 条 (免責事項)
    このスライド及び、発表の際に当方が発言した内
    容は全て個人的な見解であり、正しい情報である
    とは限りません。
    また、このスライドに記載されている内容を参
    考・引用したことによって生じた損失は一切責任
    Swift を知って欲しい

    View Slide

  12. $ cat ./overview
    Swift
    Apple が開発したモダンな言語
    主に Apple 社製品のアプリケーション開発に
    使われる
    C 系統最新言語 (?)
    Swift を知って欲しい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 を知って欲しい

    View Slide

  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 を知って欲しい

    View Slide

  21. $ ./answer_question_variable
    JavaScript: 2 両方変わる
    Swift を知って欲しい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 を知って欲しい

    View Slide

  26. $ ./in_addition_addition
    ちなみにちなみに...
    Int, Double, Bool, Stringなどはもちろん
    多くの標準ライブラリが値型
    Swift を知って欲しい

    View Slide

  27. $ ./in_addition_addition
    ちなみにちなみに...
    Int, Double, Bool, Stringなどはもちろん
    多くの標準ライブラリが値型
    UIKitは参照型だけど...
    SwiftUIではList, Text, Buttonなど
    ほとんどのコンポーネントが値型
    Swift を知って欲しい

    View Slide

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

    View Slide

  29. $ cat ./overview
    Swift
    Apple が開発したモダンな言語
    主に Apple 社製品のアプリケーション開発に
    使われる
    C 系統最新言語 (?)
    値型中心の言語
    Swift を知って欲しい

    View Slide

  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 を知って欲しい

    View Slide

  31. $ ./next
    次のテーマ
    Swift を知って欲しい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. $ man checkException
    // エ ラ ー が 起 き な い 関 数
    func safetyProcess()
    // エ ラ ー が 起 き る 可 能 性 の あ る 関 数
    func unsafetyProcess() throws
    Swift を知って欲しい

    View Slide

  37. $ man checkException
    throws が着いた関数内でしか例外を投げれない
    func safetyProcess() {
    // コ ン パ イ ル エ ラ ー
    throw SafetyDakedoError()
    }
    func unsafetyProcess() throws {
    let data = ...
    if data.isEmpty {
    // 関 数 に throws が 着 い て い る の で OK
    throw DataIsEmptyError()
    }
    }
    Swift を知って欲しい

    View Slide

  38. $ man checkException
    throws が着いた関数は「throws が着いた関数内」
    または「do-catch 文の中」でしか呼び出せない
    func safetyProcess() {
    // コ ン パ イ ル エ ラ ー
    unsafetyProcess()
    do {
    try unsafetyProcess()
    } catch {
    print(error)
    }
    }
    func unsafetyProcess() throws {
    try unsafetySomething()
    }
    Swift を知って欲しい

    View Slide

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

    View Slide

  40. $ cat ./checkexception_conclusion
    検査例外のルール
    throws が着いた関数内でしか例外を投げれない
    throws が着いた関数は「throws が着いた関数内」また
    は「do-catch 文の中」でしか呼び出せない
    throws が着いた関数は呼び出す際に try を付けなけれ
    ばいけない
    Swift を知って欲しい

    View Slide

  41. $ ./what_is_good
    何が良いの?
    Swift を知って欲しい

    View Slide

  42. $ ./pro1
    throws が着いた関数は
    「throws が着いた関数内」または
    「do-catch 文の中」でしか呼び出せない
    例外処理を強制することができる
    =例外処理をし忘れてクラッシュすることがない
    func safetyProcess() {
    do {
    try unsafetyProcess()
    } catch {
    print(error)
    }
    }
    Swift を知って欲しい

    View Slide

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

    View Slide

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

    View Slide

  45. $ ./pro3
    try!, try?演算子を使うことで無視が可能
    do-catch 文, throws が不要になる
    func safetyProcess() {
    // throw さ れ た 場 合 は ア プ リ が 落 ち る
    try! almostSafetyProcess()
    // throw さ れ た 場 合 は nil(null) が 帰 る
    try? almostSafetyProcess()
    }
    Swift を知って欲しい

    View Slide

  46. $ ./pro
    検査例外のメリット
    例外処理を強制することができる
    例外が発生する箇所がわかりやすい
    ハンドリングの必要がない箇所は簡単に無視
    ができる
    Swift を知って欲しい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  50. $ cat ./overview
    Swift
    Apple が開発したモダンな言語
    主に Apple 社製品のアプリケーション開発に
    使われる
    C 系統最新言語 (?)
    値型中心の言語
    エラーハンドリングがしやすい
    Swift を知って欲しい

    View Slide

  51. $ cat ./reference
    Swift のエラーハンドリングはなぜ最先端な
    のか
    https://qiita.com/omochimetaru/items/
    c30f7a021fb9b8f0fa92
    Swift はどのように Java の検査例外を改善し
    たか
    https://qiita.com/koher/items/
    e4c1d88981291c35d571
    Swift を知って欲しい

    View Slide

  52. $ cat ./overview
    Swiftを知っていただけたでしょうか?
    Swift
    Apple が開発したモダンな言語
    主に Apple 社製品のアプリケーション開発に
    使われる
    C 系統最新言語 (?)
    値型中心の言語
    エラーハンドリングがしやすい
    Swift を知って欲しい

    View Slide

  53. $ ./p.s.
    このスライドは LaTeX で Beamer と言うスライド
    作成用ドキュメントを使って作っています
    Swift を知って欲しい

    View Slide

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

    View Slide