Swift で早期リターン
早期リターンを使うと、コードが読みやすくなります。
例えば、 nil をとりうる値 hoge があって、 nil のときは処理を終了させたいというメソッドの場合、Ruby ではこんな感じになります。
# 早期リターンなし def test if hoge # hoge が nil でないときの処理 else return end end # 早期リターンありその 1 def test if hoge == nil return end # hoge が nil でないときの処理 end # 早期リターンその 2 def test return if hoge == nil # hoge が nil でないときの処理 end
hoge
が nil のときは、 return if hoge == nil
以降の処理が実行されないということがすぐに分かります。
Swift の場合、 こんな感じでかけるかと思います。
// 早期リターンなし func test() -> Void { if hoge != nil { // hoge が nil でないときの処理 } else { // hoge が nil のときの処理 } } // 早期リターンあり func test() -> Void { if hoge == nil { return } // hoge が nil でないときの処理 }
Swift2 からは guard
というのがあり、これを使うこともできそうです。
func test() -> Void { guard hoge != nil { return } // hoge が nil でないときの処理 }
guard
を使うことで、早期リターンをしているんだなということがわかりやすくなりそうです。
また、 guard
ではアンラップもしてくれるようなので、 hoge の値を使いたいというときにも便利そうです。
// guard なしその 1 func test() -> Void { if let unwrappedHoge = hoge { print(unwrappedHoge) } else { return } } // guard なしその 2 func test() -> Void { if hoge == nil { return } print(hoge!) } // guard あり func test() -> Void { guard let unwrappedHoge = hoge else { return } print(unwrappedHoge) }