Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
EZ-NET 熊⾕友宏
http://ez-net.jp/
2016.02.06
カジュアル Swift 勉強会 @ ⻘葉台
模索するための事前知識
可変値変数 var を極⼒避けることを
Swift 2.1.1
熊谷友宏
Xcode 5 徹底解説 MOSA
Xcode 5 の全機能を

徹底的に解説した本
OSX/iOS 系の歴史深い

有料会員制の勉強会
紙版は絶版、電子書籍は販売中
Xcode 7 でも役立つはず 法人会員も多数
@es_kumag...
熊谷友宏
横浜 iPhone 開発者勉強会
#yidev
わいわい・ゆるく、iPhone 開発者の

みんなで楽しく過ごすのが目的の会
【 横浜・馬車道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる...
熊谷友宏
@es_kumagai
EZ-NET http://ez-net.jp/
CodePiece
iOS, OS X, Apple Watch アプリ
ソースコードを Twitter と
Gist に同時投稿できる。
いつもの電卓
計算式...
CodePiece for OS X
勉強会を楽しむアプリ
ソースコードを Twitter と Gist に同時投稿できる

勉強会で知見をみんなと共有したい時とかに便利!
できること
#cswift
2種類の変数
1. 不変値変数
2. 可変値変数
2種類の変数
概要
let value = 100
var value = 100
// 値を書き込んだら…
let value = 10
// 変更はできない
value = 20
▶ let で宣言された変数
▶ 値を書き込めるのは1度だけ
不変値変数
概要
// 値を書き込んで…
var value = 10
// さらに書き換えが可能
value = 20
▶ var で宣言された変数
▶ 何度でも書き換え可能
可変値変数
概要
不変値変数の初期化は遅らせられる
▶ 使うまでに代入すれば良い
▶ 型の明記だけは必要
▶ 条件で違う値を設定したり、

クロージャーを再帰実行したいときに便利
// 型を明記して変数を定義する
let value: Int
// 値の設定はそ...
原則
不変値変数を使う
▶ 値が未来永劫、保証される
▶ 外からの予期しない変化を防ぐ
不変値変数を使う
▶ 変化を考慮したコードが不要になる
意図
▶ 値を変えてない変数を検出
▶ let の使用を促してくる
不変値変数を使う
コンパイラも推奨
不変値と可変値
1. 不変値変数
2. 可変値変数
不変値と可変値
おさらい
let value = 100
var value = 100
1. 不変値変数
2. 可変値変数
不変値と可変値
捉え方
値を表現
状態を表現
不変値変数
▶ 評価したい式で使うもの
▶ 何かを評価した結果
値を表現
a = f(x,y,z)
▶ 引数は使う前に決まる
▶ 結果は決まったら変わらない
変化する必要がない
可変値変数
▶ 時事刻々と変化する値
▶ 今の様相を表現するもの
状態を表現
location: (x,y) amount: ㎖
変化する必要がある
不変値と可変値
要所
着目点
動くか動かないか
1. 不変値変数
2. 可変値変数
location: (x,y)
location: (x,y)
可読性
変数が意味を含む
// 座標の値
let location:(x,y)
// 物体の現在位置
var location:(x,y)
不変値と可変値
オプショナルにおける意味合い
1. 不変値変数
2. 可変値変数
不変値と可変値
捉え方
値が得られるか否か
何もない状態が存在する
オプショナルな不変値変数
▶ 値が得られないかもしれない
▶ 取得後、速やかに判定する
値を得られるか否か
// 不必要にオプショナルのまま持ち越さない
let index:Int? = values.indexOf("Apple")
// オ...
// アイテムを持ってない可能性がある
struct Clipboard {
var item:AnyObject?
}
// 参照したら値、オプショナルは速やかに解消
if let item:AnyObject = clipboard.ite...
値を意識した言語仕様
▶ 新しい値型を作る
▶ 既存の値を組み合わせて表現する
構造体
値を表現する型
// 座標を表現する構造体
struct Point {
var x:Int
var y:Int
}
値型を支える仕組み (1)
扱いで振る舞いが変わる
1. 不変値変数
2. 可変値変数
内容が書き込み禁止になる
内容が書き込み可能になる
1. 不変値変数
2. 可変値変数
構造体
扱いで振る舞いが変わる
let location = Point(x:0, y:0)
location.x = 10
var location = Point(x:0, y:0)
location.x...
mutating
可変値変数だけで使える機能
struct MyValue {
// メソッドは、必要なら設計者が mutating を明示
mutating func increment {
self.value = value + 1
}
...
▶ 代入時に複製される
▶ 外部の影響を受けなくなる
代入時コピー
let location1 = Point(x:0, y:0)
// 別の変数に代入すると、新しい値が作られる
let location2 = location1
値型を支える...
▶ 代入時に複製される
▶ 外部の影響を受けなくなる
代入時コピー
var currentLocation = Point(x:0, y:0)
// 状態も取得時に複製され、影響を受けなくなる
let location = currentLoc...
不変値を意識すると起こる変化
値なのか、状態なのか
値なら可変値変数は使わない
Objective-C で普通な計算方法
総和の計算
func sum(values: [Int]) -> Int {
var result = 0
for value in values {
result += value
}
return ...
▶ 足し合わせる数は、値
▶ 足し合わせた結果は、値
値なら可変値変数は使わない
変数の用途を見直してみる
総和の計算
可変値変数を使わないで計算すると…
総和の計算
func sum(values: [Int]) -> Int {
var result = 0
for value in values {
result += value
}
return res...
可変値変数を避けるのに便利な機能
総和の計算
func sum(values: [Int]) -> Int {
return values.reduce(0) { $0 + $1 }
}
1 5 10 -3 8
21
0
0 + 1
1 + 5...
まとめ
▶ 予測不能な変化を防げる
▶ 変化を考慮した制御が不要になる
得られる利点
可変値変数を極力避ける
▶ スコープの中では認知されている考え方
▶ スコープを超えたクラス規模でも効果的?
可能性を確かめてみたい!
to be continued ...
模索するための事前知識
可変値変数 var を極力避けることを
1. 2種類の変数
不変値変数 let … 値を表現
可変値変数 var … 状態を表現
2. 原則、不変値変数を使う
予測不能な変化を阻止
変化を考慮した制御が不要
3. 値を意...
Upcoming SlideShare
Loading in …5
×

可変値変数 var を極力避けることを模索するための事前知識 #cswift

3,383 views

Published on

前回の勉強会中で話題に登った『アプリケーション規模で var を極力減らしてみよう』をみんなで試みる前の前提知識として用意した、変数を let で扱うことの意味やそれにまつわるお話を紹介するために作成したスライドです。

ややこしい部分はその場で説明したらいいかなと思って作ったので、スライド的に流れや説明が欠けているところもありますけど、幾らかの参考になるかもしれません。

Published in: Engineering
  • If you want to download or read this book, Copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

可変値変数 var を極力避けることを模索するための事前知識 #cswift

  1. 1. EZ-NET 熊⾕友宏 http://ez-net.jp/ 2016.02.06 カジュアル Swift 勉強会 @ ⻘葉台 模索するための事前知識 可変値変数 var を極⼒避けることを Swift 2.1.1
  2. 2. 熊谷友宏 Xcode 5 徹底解説 MOSA Xcode 5 の全機能を
 徹底的に解説した本 OSX/iOS 系の歴史深い
 有料会員制の勉強会 紙版は絶版、電子書籍は販売中 Xcode 7 でも役立つはず 法人会員も多数 @es_kumagai EZ-NET http://ez-net.jp/ 書籍 / 登壇
  3. 3. 熊谷友宏 横浜 iPhone 開発者勉強会 #yidev わいわい・ゆるく、iPhone 開発者の
 みんなで楽しく過ごすのが目的の会 【 横浜・馬車道 】 カジュアル Swift 勉強会 #cswift ゆるくみんなで Swift を語らえる場を
 作りたくて始めた会 【 横浜・青葉台 】 第22回を 2016-03-05 に開催 @es_kumagai EZ-NET http://ez-net.jp/ 勉強会
  4. 4. 熊谷友宏 @es_kumagai EZ-NET http://ez-net.jp/ CodePiece iOS, OS X, Apple Watch アプリ ソースコードを Twitter と Gist に同時投稿できる。 いつもの電卓 計算式も見える電卓アプリ。 watchOS 1 対応 音で再配達ゴッド 簡単操作で 再配達の申し込み。 EZ-NET IP Phone iPhone でひかり電話を使う。 自宅 LAN からの利用専用
  5. 5. CodePiece for OS X 勉強会を楽しむアプリ ソースコードを Twitter と Gist に同時投稿できる
 勉強会で知見をみんなと共有したい時とかに便利! できること #cswift
  6. 6. 2種類の変数
  7. 7. 1. 不変値変数 2. 可変値変数 2種類の変数 概要 let value = 100 var value = 100
  8. 8. // 値を書き込んだら… let value = 10 // 変更はできない value = 20 ▶ let で宣言された変数 ▶ 値を書き込めるのは1度だけ 不変値変数 概要
  9. 9. // 値を書き込んで… var value = 10 // さらに書き換えが可能 value = 20 ▶ var で宣言された変数 ▶ 何度でも書き換え可能 可変値変数 概要
  10. 10. 不変値変数の初期化は遅らせられる ▶ 使うまでに代入すれば良い ▶ 型の明記だけは必要 ▶ 条件で違う値を設定したり、
 クロージャーを再帰実行したいときに便利 // 型を明記して変数を定義する let value: Int // 値の設定はその後で出来る(1度限り) value = 10 print(value) 【余談】不変値変数の初期化
  11. 11. 原則 不変値変数を使う
  12. 12. ▶ 値が未来永劫、保証される ▶ 外からの予期しない変化を防ぐ 不変値変数を使う ▶ 変化を考慮したコードが不要になる 意図
  13. 13. ▶ 値を変えてない変数を検出 ▶ let の使用を促してくる 不変値変数を使う コンパイラも推奨
  14. 14. 不変値と可変値
  15. 15. 1. 不変値変数 2. 可変値変数 不変値と可変値 おさらい let value = 100 var value = 100
  16. 16. 1. 不変値変数 2. 可変値変数 不変値と可変値 捉え方 値を表現 状態を表現
  17. 17. 不変値変数 ▶ 評価したい式で使うもの ▶ 何かを評価した結果 値を表現 a = f(x,y,z) ▶ 引数は使う前に決まる ▶ 結果は決まったら変わらない 変化する必要がない
  18. 18. 可変値変数 ▶ 時事刻々と変化する値 ▶ 今の様相を表現するもの 状態を表現 location: (x,y) amount: ㎖ 変化する必要がある
  19. 19. 不変値と可変値 要所
  20. 20. 着目点 動くか動かないか 1. 不変値変数 2. 可変値変数 location: (x,y) location: (x,y)
  21. 21. 可読性 変数が意味を含む // 座標の値 let location:(x,y) // 物体の現在位置 var location:(x,y)
  22. 22. 不変値と可変値 オプショナルにおける意味合い
  23. 23. 1. 不変値変数 2. 可変値変数 不変値と可変値 捉え方 値が得られるか否か 何もない状態が存在する
  24. 24. オプショナルな不変値変数 ▶ 値が得られないかもしれない ▶ 取得後、速やかに判定する 値を得られるか否か // 不必要にオプショナルのまま持ち越さない let index:Int? = values.indexOf("Apple") // オプショナルは速やかに解消する if let index:Int = values.indexOf("Apple") { }
  25. 25. // アイテムを持ってない可能性がある struct Clipboard { var item:AnyObject? } // 参照したら値、オプショナルは速やかに解消 if let item:AnyObject = clipboard.item { } ▶ 無い状態が継続する可能性がある ▶ ある瞬間を切り出すと値になる オプショナルな可変値変数 何もない状態が存在する
  26. 26. 値を意識した言語仕様
  27. 27. ▶ 新しい値型を作る ▶ 既存の値を組み合わせて表現する 構造体 値を表現する型 // 座標を表現する構造体 struct Point { var x:Int var y:Int }
  28. 28. 値型を支える仕組み (1) 扱いで振る舞いが変わる 1. 不変値変数 2. 可変値変数 内容が書き込み禁止になる 内容が書き込み可能になる
  29. 29. 1. 不変値変数 2. 可変値変数 構造体 扱いで振る舞いが変わる let location = Point(x:0, y:0) location.x = 10 var location = Point(x:0, y:0) location.x = 10
  30. 30. mutating 可変値変数だけで使える機能 struct MyValue { // メソッドは、必要なら設計者が mutating を明示 mutating func increment { self.value = value + 1 } // 保持型プロパティは、セッターが mutating 扱い var value: Double // 計算型プロパティは、既定ではセッターだけが mutating 扱い var integerValue: Int { get { return Int(value) } set { self.value = Double(newValue) } } }
  31. 31. ▶ 代入時に複製される ▶ 外部の影響を受けなくなる 代入時コピー let location1 = Point(x:0, y:0) // 別の変数に代入すると、新しい値が作られる let location2 = location1 値型を支える仕組み (2) コピー
  32. 32. ▶ 代入時に複製される ▶ 外部の影響を受けなくなる 代入時コピー var currentLocation = Point(x:0, y:0) // 状態も取得時に複製され、影響を受けなくなる let location = currentLocation 値型を支える仕組み (2) コピー 値と状態の乗り入れが可能
  33. 33. 不変値を意識すると起こる変化
  34. 34. 値なのか、状態なのか 値なら可変値変数は使わない
  35. 35. Objective-C で普通な計算方法 総和の計算 func sum(values: [Int]) -> Int { var result = 0 for value in values { result += value } return result }
  36. 36. ▶ 足し合わせる数は、値 ▶ 足し合わせた結果は、値 値なら可変値変数は使わない 変数の用途を見直してみる 総和の計算
  37. 37. 可変値変数を使わないで計算すると… 総和の計算 func sum(values: [Int]) -> Int { var result = 0 for value in values { result += value } return result } func sum(values: ArraySlice<Int>) -> Int { if values.isEmpty { return 0 } else { return values.first! + sum(values.dropFirst()) } }
  38. 38. 可変値変数を避けるのに便利な機能 総和の計算 func sum(values: [Int]) -> Int { return values.reduce(0) { $0 + $1 } } 1 5 10 -3 8 21 0 0 + 1 1 + 5 6 + 10 16 + -3 13 + 8 array.reduce(0) { $0 + $1 }
  39. 39. まとめ
  40. 40. ▶ 予測不能な変化を防げる ▶ 変化を考慮した制御が不要になる 得られる利点 可変値変数を極力避ける ▶ スコープの中では認知されている考え方 ▶ スコープを超えたクラス規模でも効果的? 可能性を確かめてみたい!
  41. 41. to be continued ...
  42. 42. 模索するための事前知識 可変値変数 var を極力避けることを 1. 2種類の変数 不変値変数 let … 値を表現 可変値変数 var … 状態を表現 2. 原則、不変値変数を使う 予測不能な変化を阻止 変化を考慮した制御が不要 3. 値を意識した言語仕様 構造体 扱いで振る舞いが変わる … mutating 代入時コピー

×