Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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