SlideShare ist ein Scribd-Unternehmen logo
1 von 106
Downloaden Sie, um offline zu lesen
EZ-‐‑‒NET  熊⾕谷友宏  
http://ez-‐‑‒net.jp/
Swift 2.0  の
2015.06.20  
@  横浜へなちょこ  iOS  勉強会  #35
ERROR HANDLING
熊谷友宏
http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
with 割勘ウォッチ
MOSA
Error Handling ってなに?
NSError を
使いやすくするってコト!
エラーの話
これまでの NSError
Swift 1.2
たとえば NSFileManager
これまでの NSError
Swift 1.2
// オプショナルな NSError を状態として用意
var error:NSError? = nil
// 用意した NSError を inout で渡す
let succeeded =
fm.removeItemAtPath(path, error: &error)
// エラーを検査する
if !succeeded, let error = error {
}
func removeItemAtPath(
path:String, error: NSErrorPointer)
-> BOOL
▶ 戻り値で目的の結果を返す
▶ エラーのときは

NSErrorPointer で詳細を返す
▶ つまりエラーの詳細を知りたければ

NSError? を事前に別途用意する
これまでの NSError
Swift 1.2
func contentsOfDirectoryAtPath(
path:String, error: NSErrorPointer)
-> [AnyObject]?
▶ 戻り値で目的の結果を返す
▶ コンテンツが無ければ空の配列を返す
▶ エラーがあったときは
▶ 戻り値で nil を返す
▶ NSErrorPointer で詳細情報を返す
これまでの NSError
Swift 1.2
これからの NSError
Swift 2.0
これからの NSError
Swift 2.0
// 正常処理のスコープを決める
do {
// 目的をまっすぐ達成する
try fm.removeItemAtPath(path)
}
catch let error as NSError {
// エラーならここで処理する
}
func removeItemAtPath(
path:String) throws -> Void
▶ 目的を遂行する
▶ エラーが発生するかもネ!
これからの NSError
Swift 2.0
func contentsOfDirectoryAtPath(
path:String) throws -> [String]
▶ 戻り値で目的の結果を返す
▶ コンテンツが無ければ空の配列を返す
▶ エラーが発生するかもネ!
これからの NSError
Swift 2.0
正常系とエラー系とを分離
Error Handling で
ところで
これまでの NSError は
これまでの NSError
Swift 1.2
// NSError を用意しなくても実行可能
fm.removeItemAtPath(path, error: nil)
▶ 成否を戻り値だけで判定する
▶ 成功したものとして突き進むも可能

それって安全じゃない
Swift は
そんなことはさせません
Swift は「安全」がお好き
たとえば
func setAttributes(attributes,

ofItemAtPath:path) throws
Error Handling
Swift 2.0
fm.setAttributes(attr,ofItemAtPath:path)
エラーを未想定ならエラー
Error Handling
Swift 2.0
try fm.setAttributes(attr,ofItemAtPath:path)
エラーを想定!
Error Handling
Swift 2.0
try fm.setAttributes(attr,ofItemAtPath:path)
エラーを想定!
正常系はこれ以降のスコープ全体
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
正常系のスコープを明記!
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
正常時の処理をこの中で決着する
正常系のスコープを明記!
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch let error as NSError {
}
エラーが発生したらキャッチ!
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch let error as NSError {
}
エラーが発生したらキャッチ!
エラー時の処理をこの中で決着する
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch let error as NSError {
}
エラーが発生したらキャッチ!
エラー時の処理をこの中で決着する
エラー時はここは処理されない
まとめると
Error Handling
Swift 2.0
do {
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch let error as NSError {
}
エラーが発生したらキャッチ!
エラー時の処理をこの中で決着する
エラー時はここは処理されない
正常時の処理をこの中で決着する
正常系のスコープを明記!
エラーを想定!
つまり
エラーを確実に扱えるってコト!
next
絶対エラーにならなくない?
絶対にエラーにならない
場合だってあるかもしれない
これまでの NSError
Swift 1.2
これまでの NSError
Swift 1.2
// エラーチェックを記載しない
fm.setAttributes(attr,
ofItemAtPath:path, error:nil)
成否に関わらず以下が実行される
Error Handing
Swift 2.0
Error Handling
Swift 2.0
// エラーはない ! と明記する
try! fm.setAttributes(attr,
ofItemAtPath:path)
エラーのときは以下に進まず 強制終了
つまり
無視するにも

覚悟が要るってコト!
next
エラーのときの後始末
Error Handling
do {
let handle = try file.open()
try fm.setAttributes(attr,ofItemAtPath:path)
handle.close()
処理が終わったら閉じたい
}
catch {
}
でもエラーが発生すると…
ここまでたどり着けない
Error Handling
do {
let handle = try file.open()
defer {
handle.close()
}
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch {
}
最後に処理したいことを先に書く
ここでエラーが発生しても…
ブロックを抜ける直前に処理される
処理が終わったら閉じたい
余談
もしも Swift の Error Handling が
@try-catch-finally だったとしたら
もし try-finally だったとしたら…
var stream:Stream? = nil
@try {
stream = Stream.open(path)
fm.setAttributes(attr,ofItemAtPath:path)
}
@catch let error {
}
@finally {
stream?.close()
}
初期化と後始末のスコープ分断を考慮して外側に定義
未初期化を考慮してオプショナルチェイニング
そもそも、どこでエラーが起こるの…?
つまり
こうではなく
var stream:Stream? = nil
@try {
stream = Stream.open(path)
fm.setAttributes(attr,ofItemAtPath:path)
}
@catch let error {
}
@finally {
stream?.close()
}
▶ 入れ物の事前準備が必要
▶ 3つのブロックに着目
▶ 流れよりも構文が主役
▶ どこでエラーになるかが

コードから読めない
こうなる
do {
let handle = try file.open()
defer {
handle.close()
}
try fm.setAttributes(attr,ofItemAtPath:path)
}
catch {
}
▶ 事前準備が不要
▶ 流れが主役

原則成功、ときどき失敗
▶ コードからエラーが

発生する箇所がわかる
Error Handling は

美しいってコト!
next
Swift でエラーを扱う方法
Optional<T>
Optional<T>
値があるかないかを扱う型
if let value = optional {
}
else {
// 値がなかったときにエラーとするかは状況次第
}
▶ 値の有無による判断を強制
▶ 値がないときがエラーとは限らない
Optional のイメージ
?
Optional<T>
使いどころ
// 例えば、リストの中から値を検索する関数
func find(list, value) -> Index? {
}
▶ 単純に値の有無を提示する
▶ エラーかどうかを決め付けない
いわゆる Either 型
いわゆる Either 型
どちらかの状況を表現する型
enum Result<T> {
case Success(T)
case Failure(Error)
}
▶ 成功値か失敗値かを取る列挙型
▶ 成否というより状況の切り分けに着目
いわゆる Either 型
どちらかの状況を表現する型
switch getResult() {
case .Success(let value):
case .Failure(let error):
}
▶ 戻り値ひとつで状況の切り分けが可能
▶ 両者を同じ重みで扱う
Either 型のイメージ
いわゆる Either 型
使いどころ
▶ 戻り値で二つの場面を提示する
▶ 背反する分岐点を表現する
// 成功したか失敗したかで進路を分岐する
enum Result<T,U> {
case Succeeded<T>
case Failed<U>
}
switch getResult() {
case .Success(let value):
case .Failure(let error):
}
Fatal Error
Fatal Error
致命的なエラー
fatalError("もうムリ…")
▶ 処理が継続できない状況を表現
▶ 想定外を持ち越さない
以降の処理は実行させない!
Fatal Error のイメージ
Fatal Error
使いどころ
▶ Optional で絶対に値が入っているとき
▶ Optional で値が入っていないと困るとき
▶ try が絶対にエラーにならないとき
▶ 処理を継続できないと判断したとき
▶ 相手に責任を取らせたいとき
などなど
活用の場面は幅広い
実際
Fatal Error
Swift でも積極的に使われている
// 強制アンラップ
let value = optional!
// 暗黙アンラップなオプショナル
var value:String!
値がなければ fatalError
nil が入っているのに操作したら fatalError
Fatal Error
Swift でも積極的に使われている
// 強制キャスト
let subObj = obj as! SubClass
// エラーを想定しない
try! execute()
キャストできなければ fatalError
エラーが起これば fatalError
Fatal Error で
想定外を想定内へ転換する
Swift の Error Handling
New!
エラー型の定義
Error Handling
protocol ErrorType {
}
▶ エラー型を ErrorType で表現
▶ 実装を求められないプロトコル
▶ 列挙型と NSError が準拠できる
ErrorType プロトコル
Error Handling
enum OpenError : ErrorType {
case NotFound
case Readonly
case Busy(reason:String)
}
▶ エラー型は 列挙型 で表現
▶ 列挙型を ErrorType に準拠させる
▶ 起こり得るエラーを列記
値付き列挙子も使える
Error 型
関数やメソッドで使う
Error Handling
func open(file:FILE) throws -> Stream {
:
:
▶ エラーが有り得る機能に throws を付与
▶ エラーになるかもしれないことが

プログラマーとコンパイラの両者に伝わる
エラーを示唆する
Error Handling
func open(file:FILE) throws -> Stream {
guard _exists(file) else {
throw OpenError.NotFound
}
:
:
▶ エラーは throw で通知する
▶ エラーは列挙子で指定する
▶ throws を指定した機能でだけ通知可能
エラーを通知する
確実にエラーを想定
使う側は
Error Handling
do {
let stream = try open(file)
}
catch {
}
▶ 正常処理の範囲を do で表現
▶ エラーが発生し得る場所に try を明記
▶ エラーは catch で補足する
エラーに挑む!
エラーを想定する
Error Handling
do {
let stream = try open(file)
}
catch OpenError.NotFound {
}
catch OpenError.ReadOnly {
}
catch OpenError.Busy(let reason) {
}
全てのエラーに対処する
Error Handling
do {
let stream = try open(file)
}
catch OpenError.Busy {
}
catch is OpenError {
}
値付き列挙子の値を加味しないことも可能
列挙子を加味せずに捕獲することも可能
全てのエラーに対処する
おさらい
Error Handling
▶ エラーを列挙型で表現

起こり得るエラーが一目瞭然
▶ エラーの可能性を throws で示唆

プログラマーとコンパイラに意思が伝わる
▶ エラーが起こり得る箇所に try を明記

どこでエラーを想定しているかが明確
▶ エラーを想定したコードが必須

強制されると悩まずに済むので楽になる
おさらい
つまり
Error Handling で

とっても楽になるってコト!
Error Handling のイメージ
Error Handling
使いどころ
▶ 達成すべき目的があり

それを達成できない可能性があるとき
▶ 原因が実行時エラーに限られるとき
▶ 原因がいくつか考えられるとき
▶ 原因を提示し、対応を求めたいとき
// 目的が明確で、エラーも有り得る複合的な機能
func open(file:FILE) throws -> Stream
まとめ
エラーを扱う手段
Optional 型
▶ 単純に値の有無を提示?
いわゆる Either 型
▶ 戻り値で分岐点を提示
Fatal Error
▶ 強制終了して根本的な改善を迫る
Error Handling
▶ 目的を遂行できない時に原因を提示
Swift はこれらの使用を強要する
?
強要されると
プログラミングが楽になる
つまり
Swift は
すごいってコト!
おしまい。
▶ Error Handling ってなに?
▶ NSError を使いやすくするってコト!
▶ エラーを確実に扱えるってコト!
▶ 無視するにも覚悟が要るってコト!
▶ Error Handling は美しいってコト!
▶ Error Handling でとっても楽になるってコト!
▶ Swift はすごいってコト!
おまけ
Objective-C のことも
Swift は見捨てない
Objective-C からの自動変換
Objective-C からの自動変換
// このような Objective-C コードが
- (NSString*)getNameFromPath:(NSString*)path
error:(NSError**)error;
// このような Swift コードになる
func getNameFromPath(path:String!)
throws -> String
▶ 戻り値がクラスの場合
▶ 最後の引数が NSError** の場合
末尾の NSError を throws に変換
Objective-C からの自動変換
// このような Objective-C コードが
- (BOOL)prepareWithOptions:(NSArray*)opts
error:(NSError**)error;
// このような Swift コードになる
func prepareWithOptions(opts:[AnyObject]!)
throws -> Void
▶ 戻り値が BOOL の場合
▶ 最後の引数が NSError** の場合
末尾の NSError を throws に変換
Objective-C への自動変換
Objective-C への自動変換
// このような Swift コードが
func getName(path:String) throws -> String
// このような Objective-C コードになる
- (NSString*)getName:(NSString*)path
error:(NSError**)error;
▶ 戻り値が @objc 互換オブジェクトの場合
▶ throws が指定されている場合
throws を NSError に変換
Objective-C への自動変換
// このような Swift コードが
func prepare(options:[String]?) throws
// このような Objective-C コードになる
- (BOOL)prepare:(NSArray**)options
error:(NSError**)error;
▶ 戻り値が Void の場合
▶ throws が指定されている場合
throws を NSError に変換
安心して
Error Handling を活用できる
つまり
Swift は
かっこいいってコト!
おしまい。

Weitere ähnliche Inhalte

Was ist angesagt?

【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGParsfumokmm
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumTomohiro Kumagai
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Mitsuru Kariya
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
final int をFINAL しやがれ!
final int をFINAL しやがれ!final int をFINAL しやがれ!
final int をFINAL しやがれ!Keiichi Nagaoka
 
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswiftTomohiro Kumagai
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftTomohiro Kumagai
 
Ext.directことはじめ
Ext.directことはじめExt.directことはじめ
Ext.directことはじめShuhei Aoyama
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftTomohiro Kumagai
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときShintarou Okada
 

Was ist angesagt? (20)

【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 
Em synchrony について
Em synchrony についてEm synchrony について
Em synchrony について
 
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
final int をFINAL しやがれ!
final int をFINAL しやがれ!final int をFINAL しやがれ!
final int をFINAL しやがれ!
 
可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift可変値変数 var を極力避けることを模索するための事前知識 #cswift
可変値変数 var を極力避けることを模索するための事前知識 #cswift
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
 
Ext.directことはじめ
Ext.directことはじめExt.directことはじめ
Ext.directことはじめ
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるときunique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
 

Ähnlich wie Swift 2.0 の Error Handling #yhios

Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTMasahiro Nagano
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Flow.js
Flow.jsFlow.js
Flow.jsuupaa
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室Yusuke Ando
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3xibbar
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめSatoshi imai
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルなおき きしだ
 

Ähnlich wie Swift 2.0 の Error Handling #yhios (20)

pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
Task
TaskTask
Task
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
PHP language update 201211
PHP language update 201211PHP language update 201211
PHP language update 201211
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Flow.js
Flow.jsFlow.js
Flow.js
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 HyのすすめLispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
 
Rust Error Handling
Rust Error HandlingRust Error Handling
Rust Error Handling
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
Java SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイルJava SE 8 lambdaで変わる プログラミングスタイル
Java SE 8 lambdaで変わる プログラミングスタイル
 

Mehr von 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
 

Mehr von 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 福岡・発表資料
 

Swift 2.0 の Error Handling #yhios