Upload
yuki0211s
View
2.577
Download
4
Embed Size (px)
DESCRIPTION
第1回 Swift LT 会の発表資料です。 (2014/06/25, ヤフー株式会社で開催) 電子書籍「先取り!Swift」ができるまでの経緯と、 本書の内容をピックアップして紹介しています。
Citation preview
Swift本ができるまで第1回 Swift LT会
諏訪 悠紀• underscore Inc. • Develop, Design, and More... • iOS, Android, and More...
http://dev.classmethod.jp/author/suwa-yuki/Blog
http://underscore-app.tumblr.com/Apps
Swiftの電子書籍を
出しました!
先取り!Swift (電子書籍)
• 2014年6月18日発売
• 技術評論社出版
• Amazon Kindleストア, 楽天Kobo,
Gihyo Digital Publishingで購入可
• 600円
• Kindleストアのコンピュータ・IT
ベストセラー第1位獲得!
今日のお話
• Swift本を出版するまでの経緯など
• 「先取り!Swift」を先取り!
• Swift本を題材に、話が広げられれば
2014.6.3 WWDC 2014にてSwift発表
2014.6.3数時間後にSwiftブログ公開
クラスメソッド社長 弊社ブログ最高シェア数
大橋「Swift本書く気ある?」
WWDC 2014翌日に執筆依頼• 技評さんからブログ記事を見て声が掛かる
• 20ページ前後を想定
• 6/13発売予定 (結果、少し延期)
• 社員である小室・掛川・諏訪が執筆
↑ここまで1日
「先取り!Swift」を先取り!
• 第1章 : Swiftの基本的な言語機能
• 第2章 : Swiftの特徴的な言語機能
• 第3章 : SwiftとObjective-Cの比較
この中から要点を先取りして紹介!
関数オブジェクト
Swiftの関数は自由自在func check(score: Int, condition: Int->Bool)->String { return condition(score) ? “合格” : “不合格”
} !func lowCondition(score:Int) -> Bool { return score > 50 } !func highCondition(score:Int) -> Bool { return score > 90 } !check(60, lowCondition) // true check(60, highCondition) // false
関数はクロージャを使って短くできる
func check(score: Int, condition: Int->Bool)->String { return condition(score) ? “合格” : “不合格”
} !// クロージャ使用
check(60, {(x:Int)->Bool in return 60 > x}) // true check(60, {(x:Int)->Bool in return 90 > x}) // false !// 型推論を利用して省略
check(60, {x in 60 > x}) // true check(60, {x in 90 > x}) // false
関数オブジェクトで処理が自由自在
• 関数をオブジェクトとして扱うことができ、自由な表現ができるようになった
• 短いは正義!だが、やりすぎると読みづらいので、実装時には可読性に注意 (適材適所)
パターンマッチ
パターンマッチとは?
特定の構文を
パターンとして検出し、処理する機能。
タプルを分解して代入
// タプル
let fooBar = ("foo", "bar") let (a, b) = fooBar a // foo b // bar !// ワイルドカード
let (foo, _) = fooBar foo // foo !
for in// タプルの配列を回す
let tupleList = [(0, 1), (1, 2), (1, 3)] var tupleListStr: String = "" for (_, b) in tupleList { tupleListStr += "\(b)," } tupleListStr // 1,2,3, !// Indexと値を取る
for (index, v) in enumerate(list) { str += "\(index):\(v)," } str // 0:foo,1:bar,2:baz,
switch内でのwhere
let values = (30, 41) var maxValue: Int !switch values { case let (a, b) where a > b: maxValue = a case let (a, b) where a < b: maxValue = b case let (a, b): maxValue = a } !maxValue // 41
パターンマッチでスマートに
• タプル大活躍
• ワイルドカードが地味に便利
• switch文はパターンマッチの見せ所なのでスマートに実装しよう
Optional
Optionalの疑問
Q. 挙動はいろいろ見ると何となく分かるけど、実際はどんなメリットがあるの?
A. オブジェクトの扱いがいろいろ安全になるよ!実際にコーディングしてみるとすぐにわかるよ。
Optionalな引数
func hoge(value: Int) {
}
func fuga(value: Int?) {
}
Optionalな戻り値
func hoge() -> Int {
}
func fuga() -> Int? {
}
Optionalの利点
• ? や ! を付けておくと nil が入る可能性がある
• ? や ! を付けないと必ず値が入る
↑が引数(または戻り値)を見ただけで一目瞭然!
シンタックスシュガー
シンタックスシュガーとは?
糖衣構文(とういこうぶん)は、プログラミング言語において、読み書きのしやすさのために導入される構文であり、既に定義されている他の構文の(人間にとってより理解しやすい)書換えとして定義されるもののことである。構文糖(こうぶんとう)あるいは構文糖衣ともいう。
Swiftはシンタックスシュガーがいっぱい
• T? は Optional<T> のシンタックスシュガー
• T! は ImplicitlyUnwrappedOptional<T> のシンタックスシュガー
• String[] は Array<String> のシンタックスシュガー
• hoge(#fuga: String) -> String は
hoge(fuga fuga: String) -> String の…
シンタックスシュガーはきっと怖くない
• 普通に読んで「ん?」な構文が出てきたら、シンタックスシュガーであることを疑おう
• 元の構文が分かれば理解できる
• そして活用すればコードは短くなる
まとめ
Swift本、もしよければご一読ください!
• Swiftの基本構文について学べる
• Swiftの特徴的な言語機能を学べる
• SwiftとObjective-Cの違いを学べる