SlideShare a Scribd company logo
1 of 62
Download to read offline
EZ-NET 熊⾕友宏
http://ez-net.jp/
2016.03.12
第66回 Cocoa 勉強会勉強会
lazy var の特徴を知る
Swift カジュアルプログラミング
Swift 2.1.1
2016.04.02
第6回 カジュアル Swift 勉強会
熊谷友宏
Xcode 5 徹底解説 MOSA
Xcode 5 の全機能を

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

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

みんなで楽しく過ごすのが目的の会
【 横浜・馬車道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる場を

作りたくて始めた会
【 横浜・青葉台 】
第6回を 2016-04-02 に開催予定
@es_kumagai
EZ-NET http://ez-net.jp/
勉強会
熊谷友宏
@es_kumagai
EZ-NET http://ez-net.jp/
CodePiece
iOS, OS X, Apple Watch アプリ
ソースコードを Twitter と
Gist に同時投稿できる。
いつもの電卓
計算式も見える電卓アプリ。
watchOS 1 対応
音で再配達ゴッド
簡単操作で
再配達の申し込み。
EZ-NET IP Phone
iPhone でひかり電話を使う。
自宅 LAN からの利用専用
CodePiece for OS X
勉強会を楽しむアプリ
ソースコードを Twitter と Gist に同時投稿できる

勉強会で知見をみんなと共有したい時とかに便利!
できること
#cswift
try! Swift
2016.03.02 - 2016.03.04
try! Swift
2016 初日
try! Swift
2016 二日目
try! Swift
2016 最終日
try! Swift
The most impressive speaker for me ! 😆
HIPSTER SWIFT
★ @noescape
★ @autoclosure
★ inline lazy vars
★ variadic parameters
★ labeled loops
★ type omitting
HIPSTER SWIFT
inline lazy vars
Lazy Variables
初期化を参照時まで遅延できる変数
HIPSTER SWIFT
▶ 値型プロパティを lazy 付きで定義
▶ 右辺で参照時に設定する値を記載
Lazy Variables
class MyClass {
lazy var value: Int = {
return self.calculate()
}()
}
HIPSTER SWIFT
評価式の書式
lazy var value: Int = {
return self.calculate()
}()
これが …
lazy var value: Int = self.calculate()
こう書ける
HOW BEAUTIFUL ...
BUT … SAFE ?
class MyClass {
lazy var value: Int = self.calculate()
}
HIPSTER SWIFT
評価式の書式
var obj: MyClass? = MyClass()
obj.value
obj = nil
循環参照しない
初期化コードで self を使っていても …
DEINIT!
AWESOME !! 🎉
class MyClass {
lazy var value: Int = self.calculate()
}
HIPSTER SWIFT
気になったところ
Super Lazy Vars
オート
クロージャー
強く参照 !
強く参照 !
どういうことだろう…
循環
しない !
Lazy Variables
もっと理解して使いたい
Lazy Variables
▶ 初期値の設定を参照直前まで延期できる
▶ 主に保存型プロパティで使用
概要
// 定義の仕方
class File {
lazy var content: Content
= Content(path: somePath)
}
File
Lazy Variables
初期化タイミング
= Content(path: somePath)
Contents
lazy var
参照
値
instance
Contents
File
Lazy Variables
自身の機能で初期化できる
= Content(path: self.path)
Contents
lazy var
参照
instance
Contents
参照のときは
インスタンス生成済みなので
初期化処理で self も使える
プロパティを自分自身の機能で
初期化したいときに便利 … なもの?
そう単純なものでもなさそう
Lazy Variables
使いどころ?
挙動
Lazy Variables
▶ 参照のときに初期化が行われる
▶ 初期化して保存してすぐ参照する
挙動 1/7 … 初期化のタイミング
class File {
lazy var content: Content = Content(path: somePath)
}
// ここでは content は初期化されない
let file = File()
// ここで初めて content が初期化され、値がプロパティに保持される
let content = file.content
Lazy Variables
▶ 初回参照時に値が設定される
▶ 以降参照時は初回初期化時の値を取得
挙動 2/7 … 初期化後は既存の値を取得
class File {
lazy var content: Content = Content(path: self.path)
}
let file = File()
let content1 = file.content // いったん初期化が行われると
file.path = newPath // 関係するものを更新しても
let content2 = file.content // 得られる値は連動しない
Lazy Variables
▶ 値は自由に代入できる
▶ 初期化コードとは無関係に設定可能
挙動 3/7 … 自由に代入可能
class File {
lazy var content: Content = Content(path: somePath)
}
// ここでは content は初期化されない
let file = File()
// 自分で値を自由に設定できる
file.content = Content(path: anotherPath)
Lazy Variables
▶ 参照しなければ初期化されない
▶ 使わなければ初期化処理を省略できる
挙動 4/7 … 初期化の省略
class File {
lazy var content: Content = Content(path: somePath)
}
// ここでは content は初期化されない
let file = File()
// その後 content を参照しなければ、初期化は行われない
Lazy Variables
▶ 未初期化のときにだけ初期化される
▶ 参照前の代入も初期化とみなす
挙動 5/7 … 初期化コードを使わない初期化
class File {
lazy var content: Content = Content(path: somePath)
}
let file = File()
// 参照前に content に値を代入すると …
file.content = Content(path: anotherPath)
// 初めての参照時でも初期化コードは実行されない
let content = file.content
Lazy Variables
▶ 初期化コードは参照直前に実行
▶ 意識的に初期化完了を待つ必要なし
挙動 6/7 … 初期化は同期的に実施
class File {
lazy var content: Content
= Content(path: somePath)
}
let file = File()
// 初めての content 参照
let content = file.content
// 初期化して
self.content
= Content(path: somePath)
// 取得する
return self.content
Lazy Variables
▶ プロトコルが求めるプロパティに対して使える
▶ インスタンス生成後まで初期化を延期できる
挙動 7/7 … プロトコルに対する実装で使用可能
protocol MyProtocol {
// 非オプショナルな型を求められても
var property: Int { get }
}
class MyObject : MyProtocol {
// 初期化をインスタンス生成後まで遅延可能
lazy var property: Int = self.updateProperty()
}
特徴と利用場面
参照直前まで
既定値の代入を遅延できるプロパティ
Lazy Variables
特徴
Lazy Variables
利用場面
▶ 計算に時間のかかるプロパティで
▶ 必ず使うとは限らないが
▶ 使うなら各所で何度も参照する場面
▶ 自身の値で初期化したいプロパティで、
▶ 明確な初期化タイミングを定められず、
▶ 自身の値が変化しても影響を受けず、
▶ 別の値に書き換える道も提供したい場面
注意
Lazy Variables
▶ ゲッターも mutating 扱い
▶ 構造体だと var に格納しないと参照できない
注意 1/4
struct File {
lazy var content: Content = Content(path: somePath)
}
let file = File()
let content = file.content
cannot use mutating getter on immutable
value: 'file' is a 'let' constant
Lazy Variables
▶ 初期化以降の状態変化は連動しない
▶ 初期化後の状態と矛盾する可能性
注意 2/4
class File {
lazy var content: Content = Content(path: self.path)
}
let file = File()
let content1 = file.content // 現在のパスから初期化されたら
file.path = newPath // その後にパスが変更されても
let content2 = file.content // 古いパスのコンテンツが得られる
Lazy Variables
▶ 遅延初期化を除き、普通のプロパティと同等
▶ 初期化式と無関係な独自の値を自由に設定可能
注意 3/4
class File {
lazy var content: Content = Content(path: somePath)
}
let file = File()
// 初期化式とは無関係な値をいつでも設定できる
file.content = Content(text: "TEXT 1")
// 何度でも設定できる
file.content = Content(text: "TEXT 2")
Lazy Variables
▶ 予測困難な初期化タイミング
▶ マルチスレッドで扱うときに悲劇を生むかも
注意 4/4
class File {
lazy var content: Content = Content(path: somePath)
}
// どちらで content が初期化される?
func pushButton(sender: AnyObject) {
contentView.content = file.content
}
func updateNotification(notification: NSNotification) {
contentView.content = file.content
}
HIPSTER SWIFT
オート
クロージャー
強く参照 !
強く参照 !
循環
しない !
strong reference
class MyClass {
lazy var calculate1: () -> Int = self.calculate3
lazy var calculate2: () -> Int = { () -> Int in
return self.calculate3()
}
func calculate3() -> Int { return 10 }
}
let obj = MyClass()
obj.calculate1() // 循環参照する
obj.calculate2() // 循環参照する
obj.calculate3() // 循環参照しない
HIPSTER SWIFT
循環参照を起こす例
関連する話題
lazy var から広がる話
大域変数
大域変数も lazy
大域変数
▶ 初めて使うタイミングで初期化される
▶ 内部的に lazy var として扱われる
遅延初期化
var bundle = NSBundle.mainBundle()
class File {
init() {
self.content
= Content(path: bundle.bundlePath)
}
}
ここで初めて
初期化される
大域変数
▶ 大域変数は let で宣言できる
▶ 既定値にしかならないことを保証可能
既定値を保証
let bundle = NSBundle.mainBundle()
class File {
init() {
bundle = NSBundle(forClass: Object.self)
}
} Cannot assign to value: 'bundle' is a 'let' constant
大域変数
▶ 大域変数はモジュールの名前空間に所属
▶ 他のモジュールと衝突しない
名前空間の活用
public let defaultManager = ...
func method() {
let manager = MyModule.defaultManager
}
MyModule で定義
アプリで使用
lazy var と似ている機能
ImplicitlyUnwrappedOptional
( Type! )
ImplicitlyUnwrappedOptional
▶ 値が無いことを表現できる型
▶ 値がある前提で扱える
概要
// 値が無いまま存在させて、
var content: Content! = nil
// 値を後から設定できる
content = Content(path: path)
// 普通の変数のように操作する
doSomethingWithData(content.data)
値がなければ
強制終了
使う時には
値が入っていることを約束する
プログラマーが!
ImplicitlyUnwrappedOptional
意図
ImplicitlyUnwrappedOptional
▶ 初期化を遅らせることができる
▶ 初期化されているものとして使用できる
lazy var と似ているところ
▶ 適切なタイミングで初期化が必要
lazy var と決定的に異なるところ
初期化のタイミングを
想定できる!
特徴
初期化タイミングを制御できるなら
ImplicitlyUnwrappedOptional
lazy var
×
ImplicitlyUnwrappedOptional
lazy var × ImplicitlyUnwrappedOptional
▶ 初期化を参照時まで遅らせる
▶ 初期値を決めておける
lazy var
▶ 使うときに値が入っていることを約束する
▶ 値がないことを表現できる
ImplicitlyUnwrappedOptional
性質
ゾンビっぽい変数が生まれる
😱
※ ただしプロパティでの使用に限る
class File {
lazy var content: Content! = Content(path: self.path)
}
let file = File()
// content を参照すると初期化される
let content = file.content
// ImplicitlyUnwrappedOptional なので nil を入れられる
file.content = nil
// nil のときに再び content を参照すると再初期化される
let content = file.content
lazy var × ImplicitlyUnwrappedOptional
値を消しても復活する変数
画像キャッシュの機能などに
応用できるかもしれない
lazy
超かっこいい … 😆
lazy var
▶ 初期化されるタイミングが読めない
▶ 読み書きともに mutating 扱い
▶ 複数スレッドで衝突する可能性
▶ 初期化式とは無関係に値を入れられる
注意したいところ
▶ 単に “便利だから” という理由で使わない
▶ 初期化を遅らせたいだけなら

ImplicitlyUnwrappedOptional も検討したい
魔力にご用心
lazy の
まとめ
lazy var の特徴を知る
1. HIPSTER SWIFT
2. Lazy Variables の動き
3. 大域変数も lazy 扱い
4. ImplicitlyUnwrappedOptional は

動きが lazy var と似ている
5. lazy var × ImplicitlyUnwrappedOptional で

何度だって蘇る変数が生まれる
6. lazy の魔力にご用心

More Related Content

What's hot

Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
서비스 무중단 마이그레이션 : KT에서 Amazon으로
서비스 무중단 마이그레이션 : KT에서 Amazon으로서비스 무중단 마이그레이션 : KT에서 Amazon으로
서비스 무중단 마이그레이션 : KT에서 Amazon으로신우 방
 
20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMR20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMRAmazon Web Services Japan
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation Amazon Web Services Japan
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon CognitoAmazon Web Services Japan
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
Amazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみるAmazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみる崇之 清水
 
Amazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてAmazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてTaiji INOUE
 
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
20190220 AWS Black Belt Online Seminar Amazon S3 / GlacierAmazon Web Services Japan
 
20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSyncAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAmazon Web Services Japan
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Web Services Japan
 
Azure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまでAzure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまでDaisuke Masubuchi
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration ServiceAmazon Web Services Japan
 
[AWS Migration Workshop] AWS 클라우드로의 안전하고 신속한 마이그레이션 방안
[AWS Migration Workshop]  AWS 클라우드로의 안전하고 신속한 마이그레이션 방안[AWS Migration Workshop]  AWS 클라우드로의 안전하고 신속한 마이그레이션 방안
[AWS Migration Workshop] AWS 클라우드로의 안전하고 신속한 마이그레이션 방안Amazon Web Services Korea
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
Jawsdays2021 Amazon Connect愛について語り尽くす
Jawsdays2021 Amazon Connect愛について語り尽くすJawsdays2021 Amazon Connect愛について語り尽くす
Jawsdays2021 Amazon Connect愛について語り尽くすShinya Yamada
 
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)Amazon Web Services Japan
 

What's hot (20)

Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
서비스 무중단 마이그레이션 : KT에서 Amazon으로
서비스 무중단 마이그레이션 : KT에서 Amazon으로서비스 무중단 마이그레이션 : KT에서 Amazon으로
서비스 무중단 마이그레이션 : KT에서 Amazon으로
 
20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMR20191023 AWS Black Belt Online Seminar Amazon EMR
20191023 AWS Black Belt Online Seminar Amazon EMR
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
 
DevOps with Database on AWS
DevOps with Database on AWSDevOps with Database on AWS
DevOps with Database on AWS
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
Amazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみるAmazon SNS Mobile Push を使ってみる
Amazon SNS Mobile Push を使ってみる
 
Amazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてAmazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用について
 
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
 
20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync20190821 AWS Black Belt Online Seminar AWS AppSync
20190821 AWS Black Belt Online Seminar AWS AppSync
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct Connect
 
Amazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がりAmazon Athena で実現する データ分析の広がり
Amazon Athena で実現する データ分析の広がり
 
Azure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまでAzure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまで
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
 
03_AWS IoTのDRを考える
03_AWS IoTのDRを考える03_AWS IoTのDRを考える
03_AWS IoTのDRを考える
 
[AWS Migration Workshop] AWS 클라우드로의 안전하고 신속한 마이그레이션 방안
[AWS Migration Workshop]  AWS 클라우드로의 안전하고 신속한 마이그레이션 방안[AWS Migration Workshop]  AWS 클라우드로의 안전하고 신속한 마이그레이션 방안
[AWS Migration Workshop] AWS 클라우드로의 안전하고 신속한 마이그레이션 방안
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
Jawsdays2021 Amazon Connect愛について語り尽くす
Jawsdays2021 Amazon Connect愛について語り尽くすJawsdays2021 Amazon Connect愛について語り尽くす
Jawsdays2021 Amazon Connect愛について語り尽くす
 
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
 

Similar to lazy var の特徴を知る #cocoa_kansai #cswift

Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
Offline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすOffline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすKiwamu Okabe
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Shinobu Okano
 
[Pentaho Tips] Spoonのカスタマイズ
[Pentaho Tips] Spoonのカスタマイズ[Pentaho Tips] Spoonのカスタマイズ
[Pentaho Tips] SpoonのカスタマイズYusuke Ishii
 
Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Masakazu Muraoka
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」佐藤 俊太郎
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
いまさら聞けないCSSレイアウト入門
いまさら聞けないCSSレイアウト入門いまさら聞けないCSSレイアウト入門
いまさら聞けないCSSレイアウト入門yoshikawa_t
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Toshiki Iga
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介Naoto Mawatari
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門晃 遠山
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftTomohiro Kumagai
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 

Similar to lazy var の特徴を知る #cocoa_kansai #cswift (20)

What is chef
What is chefWhat is chef
What is chef
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Offline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすOffline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはす
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発
 
[Pentaho Tips] Spoonのカスタマイズ
[Pentaho Tips] Spoonのカスタマイズ[Pentaho Tips] Spoonのカスタマイズ
[Pentaho Tips] Spoonのカスタマイズ
 
Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
いまさら聞けないCSSレイアウト入門
いまさら聞けないCSSレイアウト入門いまさら聞けないCSSレイアウト入門
いまさら聞けないCSSレイアウト入門
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 

More from Tomohiro Kumagai

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_growTomohiro Kumagai
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせTomohiro Kumagai
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swiftTomohiro Kumagai
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominTomohiro Kumagai
 
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料Tomohiro Kumagai
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′Tomohiro Kumagai
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftTomohiro Kumagai
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラTomohiro Kumagai
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapTomohiro Kumagai
 
iOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftTomohiro Kumagai
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swiftTomohiro Kumagai
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販NightTomohiro Kumagai
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′Tomohiro Kumagai
 
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftTomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftTomohiro Kumagai
 
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #iosconGetting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #iosconTomohiro Kumagai
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′Tomohiro Kumagai
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017Tomohiro Kumagai
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料Tomohiro Kumagai
 

More from Tomohiro Kumagai (20)

最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
 
Swift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせSwift 所有権 要諦 #ゆるちとせ
Swift 所有権 要諦 #ゆるちとせ
 
_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift_Function Builders in Swift #love_swift
_Function Builders in Swift #love_swift
 
Property Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoominProperty Wrappers の特徴を眺める #swiftzoomin
Property Wrappers の特徴を眺める #swiftzoomin
 
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
 
みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′みんなで Swift 復習会
GO! in 札幌 – 10th′′
みんなで Swift 復習会
GO! in 札幌 – 10th′′
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswift
 
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
 
Swift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsapSwift クラスのイニシャライザー #devsap
Swift クラスのイニシャライザー #devsap
 
iOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swiftiOSCon 2019 in London #ioscon #love_swift
iOSCon 2019 in London #ioscon #love_swift
 
Around the 変数 let #love_swift
Around the 変数 let #love_swiftAround the 変数 let #love_swift
Around the 変数 let #love_swift
 
もくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Nightもくもく執筆会 #技術同人誌再販Night
もくもく執筆会 #技術同人誌再販Night
 
みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′みんなで Swift 復習会 GO! in 岩手 – 9th′
みんなで Swift 復習会 GO! in 岩手 – 9th′
 
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswiftmacOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
 
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swiftみんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
 
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #iosconGetting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
 
みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′みんなで Swift 復習会
GO! in 京都 – 6th′
みんなで Swift 復習会
GO! in 京都 – 6th′
 
みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′みんなで Swift 復習会 GO! in 福岡 – 5th′
みんなで Swift 復習会 GO! in 福岡 – 5th′
 
勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017勉強会の東京外開催の気持ち #yuru_bounen2017
勉強会の東京外開催の気持ち #yuru_bounen2017
 
みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料みんなで Swift 復習会 GO! in 福岡・発表資料
みんなで Swift 復習会 GO! in 福岡・発表資料
 

lazy var の特徴を知る #cocoa_kansai #cswift