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
Tunnel 社内勉強会 Swift の紹介
Search
Motoi Washida
August 03, 2016
Programming
0
270
Tunnel 社内勉強会 Swift の紹介
Motoi Washida
August 03, 2016
Tweet
Share
More Decks by Motoi Washida
See All by Motoi Washida
アプリのための「レイヤー化」アーキテクチャ / Droid Meetup 2019-03
wm3
0
2.5k
Material Design の社内勉強会を行った / Android Engineer Design 1
wm3
1
170
API仕様書から自前でコード生成して運用した話 / DroidKaigi 2018 Reject Conference
wm3
0
830
apply() 要らなくない?
wm3
2
1.3k
Firebase Analytics で 画像ロードのパフォーマンス を測定し、改善をした話
wm3
2
1.4k
iOS の Reactive 系ライブラリ
wm3
1
900
Other Decks in Programming
See All in Programming
受け取る人から提供する人になるということ
little_rubyist
0
230
Remix on Hono on Cloudflare Workers
yusukebe
1
290
ヤプリ新卒SREの オンボーディング
masaki12
0
130
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
170
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
Contemporary Test Cases
maaretp
0
130
Macとオーディオ再生 2024/11/02
yusukeito
0
370
初めてDefinitelyTypedにPRを出した話
syumai
0
400
CSC509 Lecture 11
javiergs
PRO
0
180
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
200
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Adopting Sorbet at Scale
ufuk
73
9.1k
Unsuck your backbone
ammeep
668
57k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Designing for humans not robots
tammielis
250
25k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Transcript
Swift の紹介 鷲田 基
始まり
2014 年 6 月
Apple WWDC で発表
(当時発表された) 特徴
モダン
安全
インタラクティブ
逆に言うと
Objective-C
古臭い
壊れやすい
手軽に試せない
質問
• Swift 使った事ある人いますか? • Objective-C 使った事ある人いますか? • Objective-C のコード見た事ある人いますか?
最初どう思いました?
None
Swift のモダンな所
1. 親しみやすい 2. 今時の機能
親しみやすい
Objective-C
Swift
親しみやすい
Objective-C からすると • API 呼び出し可能(相互で) • 似たようなオブジェクト指向の機能 ◦ Protocol、Protocol Extension(Category)
• ARC
Java
Swift
親しみやすい
Java からすると • 安全さ ◦ 静的型付け、ジェネリクス、アクセスコントロール、例外処 理 • (そもそもObjective-C と
Java はかなり近い)
LLからすると • 簡易な記述 ◦ 変数の省略(型推論)、高機能なコレクション処理 ◦ 配列、マップ、関数オブジェクトのリテラル • インタラクティブな環境(Playground)
静的型付け・オブジェクト指向を 基盤にしつつ LL の利便性や関数型言語の 手法を取り入れた
今時の言語
Scala や Kotlin, Go が近い
• 若干不便 • 低レベルの動作が推測しやすい ただし GC が無い
Swift の安全な所
Java と類似の安全性担保の機能 • 静的型付け、ジェネリクス • アクセスコントロール • 例外処理(チェック例外など)
他にもたくさん
安全を担保する機能を どんどん使ってバグを 減らしましょう!
⚠ 安全じゃない物
その1
nil / null
ぬるぽ (^^)
nil かもしれない。ビルドできない
Optional にすればビルド可能
if let … で中身を安全に取り出す
guard let … で nil の場合に return
• Optional ◦ nil の可能性があるものと無い物をコンパイル時に区別 • if let … /
guard let … ◦ 安全に nil じゃないものを取り出す
⚠ 安全じゃない物
その2
キャスト
キャスト、危険!
as? で安全にキャスト
switch 文で複数の分岐をシンプルに
enum でより明白に
• 強制なキャスト(as!) とオプショナルな as? ◦ as? を使うのが推奨 • パターンマッチ •
Swift の enum はとても柔軟
⚠ 安全じゃない物
その3
変数 (var)
• var … 変数 • let … 定数、Java の final
定数 (let) を使いましょう
var はバグを作りやすい
for … in … でわかりやすいループ
map でループで使う var も削除
• なるべく var を使わない • 言語の機能を使うと var を使わずに済む事が多 い
⚠ 安全じゃない物
その4
class
class
struct
struct の class との違い • インスタンス変数やメソッド定義などは一緒 ◦ 継承できないなど、幾つかの制限がある • 代入に対して
ARC では無くコピーがされる ◦ 循環参照などの問題が無いので比較的安全
その他の機能
いろいろ
タプル, Protocol Extension, typedef
@noesape, @autoclosure など
略
コミュニティ
公式ページ swift.org
仕様の提案とディスカッショ ン
[email protected]
決まった事
github.com/apple/swift- evolution
新機能の提案やその議論が 見れる
swift-evolution での提案例
プラットフォーム
macOS / iOS
Linux
Server Side Swift など という事をやろうとしている 人達もいるらしい
Android, Windows
一応あるらしい
Swift の今後について
最近のニュース
http://qiita. com/mono0926/items/c51b74fae679e1e39d2 b
Swift 4 の開発ロードマップ 発表
2017 年秋 リリース予定
Swift 3 の(非互換な)仕様は 確定
Swift 3 の変更
Swift 2系と非互換!
中にはアグレッシブな 変更点も
for …; …; … { … } 構文禁止
++/-- 演算子禁止
多くは細かい構文の改善
おまけ Apple と開発言語
Objective-C
macOS の前身 NeXTSTEP の 開発用言語
C 言語の Smalltalk 風オブジェクト指向 拡張
C 言語とオブジェクト指向 の部分が分離
[object method: arg]
@interface … @end
最小限の修正で最大限の機 能の提供
Java
Apple は Java が好き?
Objective-C の Java 風の 「Modern syntax」の検討 (1997)
やめた
Mac OS X 発表 Cocoa が Java で書けた (2000)
10.4 でサポート外に
Java を Apple が独自提供
Oracle が提供する事に (いつかは忘れた)
いまいちモダンじゃない Objective-C
Java に対する期待は 一定数あった
しかし実現せず
最終的に独自言語 Swift を 開発する事に
結果として 今時かつ安全 ハイパフォーマンスな 期待感の高い言語に
以上です