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のオーバーロード選択のスコア規則21種類
kntkymt
0
96
Meet high-performance image filtering in Swift
kntkymt
0
130
プログラミングを始めてからiOSエンジニアになるまで
kntkymt
0
780
SwiftUIでの非同期処理データの状態管理を考える
kntkymt
1
1.7k
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
kntkymt
1
1.5k
Other Decks in Programming
See All in Programming
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
はしめてのプログラミングとロボット制御
watawatavoltage
0
290
Rubyのパフォーマンスプロファイリングの改善 / Enhancing performance profiling for Ruby
osyoyu
1
410
Architectures with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
100
Introduction to GitOps
hwchiu
0
110
リハビリmruby
kishima
1
160
最古の関数型言語「Lisp」ことはじめ / lisp_in_kamiyama
uhooi
1
190
CSC307 Lecture 05
javiergs
PRO
0
210
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
入社1ヶ月でここまでやった!Findy Toolsインフラ支援の最適化
rvirus0817
6
1.4k
iOSアプリでクリップボードにコピーしたことをユーザーに伝えるちょうど良いフィードバックを探す
ski
0
100
わかりやすい正解を捨てて、コトに向き合う - スクラムフェス金沢2024 スポンサーセッション
yusukekokubo
0
170
Featured
See All Featured
How to Ace a Technical Interview
jacobian
274
23k
Art, The Web, and Tiny UX
lynnandtonic
291
20k
The Pragmatic Product Professional
lauravandoore
29
6.1k
What's new in Ruby 2.0
geeforr
338
31k
Designing for Performance
lara
604
67k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
353
29k
Design by the Numbers
sachag
277
18k
Clear Off the Table
cherdarchuk
89
320k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
78
15k
Making Projects Easy
brettharned
111
5.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Building Effective Engineering Teams - LeadDev
addyosmani
47
2.2k
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
を知って欲しい