SlideShare a Scribd company logo
糖衣構文なしで
Swi$のオプショナルを
使うとどうなるか?
2016年1月9日
藤本尚邦 / Cocoa勉強会(関東) #76
1
自己紹介
• 藤本尚邦 (@%isa)
• h+ps://github.com/%isa
• フリーランスプログラマー
• 主な作品: RubyCocoa, Swi=yLayout
• Mac開発歴、薄く長く約25年
• iOS開発歴、約1年
2
Agenda
• オプショナルおさらい
• 糖衣構文なしでオプショナル
• オプショナル使いこなしの注意点
• まとめ
3
オプショナルおさらい
普通の型に"?"または"!"の1文字を付けて型宣言す
るとオプショナルになります。見た目はたった1文
字の違いですが、普通の型とオプショナル型はまっ
たくの別物です。
var absolutelyInt: Int // 普通の型
var maybeInt: Int? // オプショナル型
var probablyInt: Int! // 暗黙のオプショナル型
4
オプショナルおさらい
オプショナルはおおよそ以下のように定義された普
通の enum です1
:
enum Optional<Wrapped> {
case None
case Some(Wrapped)
}
1
この発表で不要な情報は省いています
5
オプショナルおさらい
オプショナルが他のenumで定義された型と違うのは
豊富な糖衣構文2
を持っている。この一点です。
var maybeArray: [Int]? // Optional Type
var probablyArray: [Int]! // Implicitly Unwrapped Optional Type
if let array = maybeArray { ... } else { ... } // Optional Binding
let x = maybeArray?.count // Optional Chaining
let x = maybeArray! // Forced Unwrapping
let x = probablyArray.count // Implicitly Forced Unwrapping
let x = maybeArray ?? [1,2,3] // Nil Coalescing Operator
let x = someObject as? [Int] // Type Cast Operator
let x = someObject as! [Int] // Forced Type Cast Operator
2
英語では Syntax Sugar あるいは Syntac-c Sugar
6
糖衣構文なしでオプショナル
• 変数の宣言
• Op$onal Binding
• Op$onal Chaining
• Forced Unwrapping
• Nil Coalescing Operator
7
変数の宣言
var maybeInt: Int?
var maybeArray: [Int]?
糖衣構文なしだと
var maybeInt: Optional<Int>
var maybeArray: Optional<Array<Int>>
8
Op#onal Binding
if let array = maybeArray {
IF-CLAUSE
} else {
ELSE-CLAUSE
}
糖衣構文なしだと
switch maybeArray {
case .Some(let array):
IF-CLAUSE
case .None:
ELSE-CLAUSE
}
9
Op#onal Chaining
let x = maybeArray?.count // Optional Chaining
糖衣構文なしだと
let x = ({ Void -> Optional<Int> in
switch maybeArray {
case .None: return .None
case .Some(let array): return array.count
}
})()
10
Forced Unwrapping
let x = maybeArray! // Forced Unwrapping
糖衣構文なしだと
let x = ({ Void -> Int in
switch maybeArray {
case .None: fatalError("unexpectedly found nil ...")
case .Some(let array): return array
}
})()
11
Nil Coalescing Operator
let x = maybeArray ?? [1,2,3] // Nil Coalescing Operator
糖衣構文なしだと
let x = ({ (arg:[Int]) -> [Int] in
switch maybeArray {
case .None: return arg
case .Some(let array): return array
}
})([1, 2, 3])
12
オプショナル使いこなしの注意点
• "?"付きで型宣言するのが基本
• "!"付き型宣言は明確な理由がなければ使わない
• 強制アンラップ・キャストは、値がnilならバグの
ときのみ使う
• "?"や"??"を積極的に使うとコードの可読性が増す
if let delegate = delegate { delegate.someMethod() } // 冗長
delegate?.someMethod() // 簡潔・可読性良し
13
まとめ
• 普通の型とオプショナル型は見た目以上に異なる
• オプショナルはenumで定義された単なる型
• Swi%プログラミングではオプショナルが重要
• 糖衣構文なしでのオプショナルのプログラムは地獄
• だからたくさん糖衣構文があるんだよ
• オプショナルをきちんと理解して良いSwi%プログラム
を書こう
14
参考文献
• The Swi) Programming Language (Swi) 2.1)
h8ps://developer.apple.com/library/ios/
documentaDon/Swi)/Conceptual/
Swi)ProgrammingLanguage/
15
Thank you!2016年1月9日
藤本尚邦 / Cocoa勉強会(関東) #76
16

More Related Content

PDF
Save The Zoo 20070127 Kouno
PDF
若者が勉強会に参加しない問題
PDF
開発フローを改善した時の昔話
PDF
プログラミングTipsサイトlt(town bash 201710)
PDF
mod_perlで動くアプリをどう置くか #hachiojipm
PDF
日本の祝祭日を計算してカレンダ-に表示するアプリサンプル
PDF
Optional型の簡単な説明
PDF
Ruby on railsでlinebotを試した記録
Save The Zoo 20070127 Kouno
若者が勉強会に参加しない問題
開発フローを改善した時の昔話
プログラミングTipsサイトlt(town bash 201710)
mod_perlで動くアプリをどう置くか #hachiojipm
日本の祝祭日を計算してカレンダ-に表示するアプリサンプル
Optional型の簡単な説明
Ruby on railsでlinebotを試した記録

Viewers also liked (20)

PDF
図解でわかる Microsoft Office Live Meeting 2007 利用ガイド (Office 2010+Windows 7/Vista)
PDF
HiRoshimaR3_IntroR
PDF
HiroshimaR6_Introduction
PDF
Swift 2.0 の Error Handling #yhios
PDF
採用LT「まだお祈りデプロイで消耗してるの?」
PDF
TRIZの講義・一時間目 発明原理+α
PDF
初心者のための、デザインのはじめの一歩
PDF
分析サンプル_ラーメン店販促施策立案のための来店客調査
PDF
【19-D-1】人間と機械学習のはざま:どこまでアルゴリズムに任せるか
PDF
なぜステマがネットで騒動になるのか
PPTX
やっとわかったタイピングスピード向上のコツ
PPTX
Serverspec at hbstudy #45
PDF
Presen ラーメン産業展
PDF
Jjug 20140430 gradle_intro
PDF
新潟県村上市Facebook連続3回セミナーその2in山北商工会
PDF
自分よりも技術力の高い会社に入社して感じたこと
PDF
LIG's DIRECTION school 2016 初級コース03 スタッフとのコミュニケーションからディレクションを設計する_160522
PDF
ゲーム理論とマーケットデザイン入門 --- マーケットデザイン編
PDF
Ideawork tools workshop_2013311
KEY
capybara で快適なテスト生活を
図解でわかる Microsoft Office Live Meeting 2007 利用ガイド (Office 2010+Windows 7/Vista)
HiRoshimaR3_IntroR
HiroshimaR6_Introduction
Swift 2.0 の Error Handling #yhios
採用LT「まだお祈りデプロイで消耗してるの?」
TRIZの講義・一時間目 発明原理+α
初心者のための、デザインのはじめの一歩
分析サンプル_ラーメン店販促施策立案のための来店客調査
【19-D-1】人間と機械学習のはざま:どこまでアルゴリズムに任せるか
なぜステマがネットで騒動になるのか
やっとわかったタイピングスピード向上のコツ
Serverspec at hbstudy #45
Presen ラーメン産業展
Jjug 20140430 gradle_intro
新潟県村上市Facebook連続3回セミナーその2in山北商工会
自分よりも技術力の高い会社に入社して感じたこと
LIG's DIRECTION school 2016 初級コース03 スタッフとのコミュニケーションからディレクションを設計する_160522
ゲーム理論とマーケットデザイン入門 --- マーケットデザイン編
Ideawork tools workshop_2013311
capybara で快適なテスト生活を
Ad

Swift Optional without Syntax Sugar