More Related Content More from Tomohiro Kumagai More from Tomohiro Kumagai (20) Swift の可変値と不変値 #cocoa_kansai8. 原則
可能な限り let を使う
let prices = [100.0, 300.0, 200.0]
let withTax = { $0 * 1.08 }
let pricesWithTax = prices.map(withTax)
let sum = pricesWithTax.reduce(0) {$0+$1}
Swift
➡ Swift らしい安全なコードになる
19. りんごは 130 円です
じゃあ、3 つください
_φ(・_・
全部で 500 円です!
え? りんごっていくらだっけ
りんごは 250 円です
あれ?
そうだメモで確かめよう
ほんとだ 250 円って書いてあった
20. ???
▶ りんご = 130
▶ 値段メモ.りんご = りんご
▶ 購入数 = 3
▶ print 金額(りんご,購入数) 500
▶ print (りんご) 250
▶ print (値段メモ.りんご) 250
28. クロージャーによる値の設定
let getPrice = { () -> Double? in
if inStock {
return applyRate(basePrice)
}
else {
return nil
}
}
let price = getPrice()
Swift
31. 即時初期化の利点
let basePrice = 150
let discountRate
= (isBargainDay ? 0.03 : 0.00)
let price = getPrice()
Swift
▶ 傍を見れば設定値が分かる
▶ どんな場合も初期化できる、はず
47. この星は移動するよ!
今は (0, 0) に居るよ
今はどこに居るの?
_φ(・_・
横に20、縦に800、移動して!
移動したよ!
状態を可変値で宣言
今の状態を値にコピーして返却
状態の変更を不変値で指示
受け取った値を不変値にコピー
受け取った値をコピーして状態を更新
48. 今は (20, 800) に居るよ
今はどこに居るの?
_φ(・_・
移動したよ!
前回より横に60移動したのね!
今は (80, 800) に居るよ
勝手に移動したよ!
お、今はどこに居るの?
_φ(・_・
受け取った値を不変値にコピー
受け取った値を不変値にコピー
今の状態を値にコピーして返却
今の状態を値にコピーして返却
受け取った値と以前にコピーした値を比較
なんらかの値で状態を更新
62. ▶ mutating な機能のみ内容を変更可能
▶ mutating な機能は可変値でのみ利用可
▶ それ以外の機能は常に利用可能
機能の定義
構造体
struct MyValue {
mutating func mutableMethod(v:Int)
func immutableMethod(v:Int)
}
80. 総括
2種類の変数
▶ 不変値変数 let で値を扱う
▶ 可変値変数 var で状態を扱う
構造体
▶ 値や状態に特化したオブジェクト
▶ 変数の種類で状態の不変性を制御
クラス
▶ 状態の制御に特化したオブジェクト