Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swiftを知って欲しい
Search
kntk
March 21, 2020
Programming
1
110
Swiftを知って欲しい
kntk
March 21, 2020
Tweet
Share
More Decks by kntk
See All by kntk
SwiftのSIMDとその利用方法
kntkymt
2
160
Swiftのオーバーロード選択のスコア規則21種類
kntkymt
0
140
Meet high-performance image filtering in Swift
kntkymt
0
150
プログラミングを始めてからiOSエンジニアになるまで
kntkymt
0
1.5k
SwiftUIでの非同期処理データの状態管理を考える
kntkymt
1
1.8k
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
kntkymt
1
1.7k
Other Decks in Programming
See All in Programming
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
210
Vue3の一歩踏み込んだパフォーマンスチューニング2024
hal_spidernight
3
3.1k
Golang と Erlang
taiyow
8
1.9k
カスタムしながら理解するGraphQL Connection
yanagii
1
1.2k
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
1
290
Outline View in SwiftUI
1024jp
1
160
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
140
Vue.js学習の振り返り
hiro_xre
2
130
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
1.7k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
3
400
Macとオーディオ再生 2024/11/02
yusukeito
0
200
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
140
Featured
See All Featured
A better future with KSS
kneath
238
17k
Visualization
eitanlees
144
15k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
RailsConf 2023
tenderlove
29
880
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Happy Clients
brianwarren
97
6.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Transcript
Swiftを知って欲しい @kntk Swift を知って欲しい
$ ./intro/aMonthAgo 1ヶ月前 (勢いで)開発勉強会で発表しようと 思った Swift を知って欲しい
$ ./intro/aWeekAgo 1週間前 発表内容が思いつかないがまだ焦る時期 じゃない Swift を知って欲しい
$ ./intro/yabai 先週末 発表できることない... Swift を知って欲しい
$ ./intro/theme プログラミング学びたてだからこそ できる発表があるのかも...? Swift を知って欲しい
$ ./intro/theme2 Swiftの基本的(だけど重要)な内容を 紹介したらどうだろう Swift を知って欲しい
$ cat ./intro/slide_theme Swiftを知って欲しい Swift を知って欲しい
$ cat ./intro/aim 達成目標(?) Swift を知らない方に、Swift を知ってもらう Swift を知っている方に、初学者目線の Swift
を知ってもらう Swift を知って欲しい
$ ./main それでは本題 Swift を知って欲しい
$ ./before の前に... Swift を知って欲しい
$ cat ./disclaimer 利用規約・免責事項 第 1 条 (適用) 本規約はこのスライド及び発表を見た全ての方と 私・kntk(以下、当方とします)
との間のスライド 及び発表に関わる一切の関係に適用されるものと します。 第 2 条 (免責事項) このスライド及び、発表の際に当方が発言した内 容は全て個人的な見解であり、正しい情報である とは限りません。 また、このスライドに記載されている内容を参 考・引用したことによって生じた損失は一切責任 Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) Swift を知って欲しい
$ ./variables Swift let pi = 3.14 // 定 数
var money = 5000 // 変 数 Swift を知って欲しい
$ ./variables Swift let pi = 3.14 // 定 数
var money = 5000 // 変 数 JavaScript const pi = 3.14; // 定 数 let money = 5000; // 変 数 Swift を知って欲しい
$ ./suddenly 突然ですが Swift を知って欲しい
$ ./question 問題です Swift を知って欲しい
$ echo ”Can you read the next program?” 次のプログラムの出力は どうなるでしょう?
Swift を知って欲しい
$ cat ./question_variable.swift Swift var numbers = [1, 2, 3]
var copy = numbers // コ ピ ー 元 に 要 素 を 追 加 numbers.append(4) print("numbers: \(numbers)") print("copy: \(copy)") Swift を知って欲しい
$ 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 を知って欲しい
$ ./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 を知って欲しい
$ ./answer_question_variable JavaScript: 2 両方変わる Swift を知って欲しい
$ ./answer_question_variable Swift: 1 numbersだけ変わる Swift を知って欲しい
$ ./why? Swiftのコレクションは値型 Swift を知って欲しい
$ ./why? Swiftのコレクションは値型 参照型のclassと値型のstructが 存在 Swift を知って欲しい
$ ./in_addition ちなみに... Copy-On-Writeと言う仕組みで 「値が最初に変更される直前」にコピー var numbers = [1, 2,
3] var copy = numbers print(&numbers == ©) // true numbers.append(4) print(&numbers == ©) // false ※本当は&numbers ではなく UnsafePointer(numbers) Swift を知って欲しい
$ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 Swift を知って欲しい
$ ./in_addition_addition ちなみにちなみに... Int, Double, Bool, Stringなどはもちろん 多くの標準ライブラリが値型 UIKitは参照型だけど... SwiftUIではList,
Text, Buttonなど ほとんどのコンポーネントが値型 Swift を知って欲しい
$ man struct 全部が全部値型で記述すればOK!! と言うわけではなく... 使い分けは必要! 参照型/値型のどちらでも良い時は値型で書くことが多い (?) Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) 値型中心の言語 Swift を知って欲しい
$ 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 を知って欲しい
$ ./next 次のテーマ Swift を知って欲しい
$ ./suddenly2 突然ですが Swift を知って欲しい
$ ./question2 質問です Swift を知って欲しい
$ echo ”Do you know ’checkException’?” 「検査例外」って知ってますか? Swift を知って欲しい
$ ./evil_language_java? †魔の言語Java† にも有ったアレ? Swift を知って欲しい
$ man checkException // エ ラ ー が 起 き
な い 関 数 func safetyProcess() // エ ラ ー が 起 き る 可 能 性 の あ る 関 数 func unsafetyProcess() throws Swift を知って欲しい
$ man checkException throws が着いた関数内でしか例外を投げれない func safetyProcess() { // コ
ン パ イ ル エ ラ ー throw SafetyDakedoError() } func unsafetyProcess() throws { let data = ... if data.isEmpty { // 関 数 に throws が 着 い て い る の で OK throw DataIsEmptyError() } } Swift を知って欲しい
$ man checkException throws が着いた関数は「throws が着いた関数内」 または「do-catch 文の中」でしか呼び出せない func safetyProcess()
{ // コ ン パ イ ル エ ラ ー unsafetyProcess() do { try unsafetyProcess() } catch { print(error) } } func unsafetyProcess() throws { try unsafetySomething() } Swift を知って欲しい
$ man checkException throws が着いた関数は呼び出す際に try を付けな ければいけない func safetyProcess()
{ do { // コ ン パ イ ル エ ラ ー unsafetySomething() // OK try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ cat ./checkexception_conclusion 検査例外のルール throws が着いた関数内でしか例外を投げれない throws が着いた関数は「throws が着いた関数内」また は「do-catch
文の中」でしか呼び出せない throws が着いた関数は呼び出す際に try を付けなけれ ばいけない Swift を知って欲しい
$ ./what_is_good 何が良いの? Swift を知って欲しい
$ ./pro1 throws が着いた関数は 「throws が着いた関数内」または 「do-catch 文の中」でしか呼び出せない 例外処理を強制することができる =例外処理をし忘れてクラッシュすることがない
func safetyProcess() { do { try unsafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ ./pro2 throws が着いた関数は呼び出す際に try を付 けなければいけない 例外が発生する箇所がわかりやすい func safetyProcess()
{ do { try unsafetyProcess() safetySomething() try unsafetySomething() } catch { print(error) } } Swift を知って欲しい
$ ./con? 関数側では throw するしかないけど 無視したい/ちゃんとやれば起こるはずのない例 外もあるじゃん それを毎回... func safetyProcess()
{ do { try almostSafetyProcess() } catch { print(error) } } Swift を知って欲しい
$ ./pro3 try!, try?演算子を使うことで無視が可能 do-catch 文, throws が不要になる func safetyProcess()
{ // throw さ れ た 場 合 は ア プ リ が 落 ち る try! almostSafetyProcess() // throw さ れ た 場 合 は nil(null) が 帰 る try? almostSafetyProcess() } Swift を知って欲しい
$ ./pro 検査例外のメリット 例外処理を強制することができる 例外が発生する箇所がわかりやすい ハンドリングの必要がない箇所は簡単に無視 ができる Swift を知って欲しい
$ ./in_addition2 さらに... SwiftにはOptional(null安全)の機構 が備わっている Swift を知って欲しい
$ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! Swift を知って欲しい
$ ./thus 検査例外+Optionalによって エラーハンドリングが容易 クラッシュすることがまず無い! 「!を付けなければ基本落ちないから大丈夫」 try! hoge! Swift を知って欲しい
$ cat ./overview Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に 使われる
C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
$ cat ./reference Swift のエラーハンドリングはなぜ最先端な のか https://qiita.com/omochimetaru/items/ c30f7a021fb9b8f0fa92 Swift はどのように
Java の検査例外を改善し たか https://qiita.com/koher/items/ e4c1d88981291c35d571 Swift を知って欲しい
$ cat ./overview Swiftを知っていただけたでしょうか? Swift Apple が開発したモダンな言語 主に Apple 社製品のアプリケーション開発に
使われる C 系統最新言語 (?) 値型中心の言語 エラーハンドリングがしやすい Swift を知って欲しい
$ ./p.s. このスライドは LaTeX で Beamer と言うスライド 作成用ドキュメントを使って作っています Swift を知って欲しい
$ ./p.p.s. C0de では新入生向けに† Java †を 1 から教える 授業を開催しています! Swift
を知って欲しい