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

Swiftを知って欲しい

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for kntk kntk
March 21, 2020

 Swiftを知って欲しい

Avatar for kntk

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