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
200
Swiftのオーバーロード選択のスコア規則21種類
kntkymt
0
160
Meet high-performance image filtering in Swift
kntkymt
0
150
プログラミングを始めてからiOSエンジニアになるまで
kntkymt
0
1.6k
SwiftUIでの非同期処理データの状態管理を考える
kntkymt
1
1.9k
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
kntkymt
1
1.8k
Other Decks in Programming
See All in Programming
為你自己學 Python
eddie
0
520
[JAWS-UG横浜 #80] うわっ…今年のServerless アップデート、少なすぎ…?
maroon1st
0
100
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
1.9k
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
590
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
1
440
Amazon Nova Reelの可能性
hideg
0
200
情報漏洩させないための設計
kubotak
5
1.3k
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
220
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
130
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
2.7k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Adopting Sorbet at Scale
ufuk
74
9.2k
The Invisible Side of Design
smashingmag
299
50k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Visualization
eitanlees
146
15k
Building an army of robots
kneath
302
45k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
180
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
を知って欲しい