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

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

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

    var money = 5000 // 変 数 JavaScript const pi = 3.14; // 定 数 let money = 5000; // 変 数 Swift を知って欲しい
  4. $ cat ./question_variable.swift Swift var numbers = [1, 2, 3]

    var copy = numbers // コ ピ ー 元 に 要 素 を 追 加 numbers.append(4) print("numbers: \(numbers)") print("copy: \(copy)") Swift を知って欲しい
  5. $ 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 を知って欲しい
  6. $ ./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 を知って欲しい
  7. $ ./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 を知って欲しい
  8. $ 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 を知って欲しい
  9. $ man checkException // エ ラ ー が 起 き

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

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

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

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

    文の中」でしか呼び出せない throws が着いた関数は呼び出す際に try を付けなけれ ばいけない Swift を知って欲しい
  14. $ ./pro2 throws が着いた関数は呼び出す際に try を付 けなければいけない 例外が発生する箇所がわかりやすい func safetyProcess()

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

    { // throw さ れ た 場 合 は ア プ リ が 落 ち る try! almostSafetyProcess() // throw さ れ た 場 合 は nil(null) が 帰 る try? almostSafetyProcess() } Swift を知って欲しい
  16. $ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる

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

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

    使われる C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい