Swiftのguardのわかり方
久々にコードに触れるようになってきて、Swiftを読み書きしている。Swiftの guard
は次のような感じで使うことが多いと思う。
guard let foo = item.foo else { return }
そのイメージだと、 何かを否定する条件だった場合に結構頭がこんがらがる。
guard !canceled else { return } // これはどっち?
これは、以下のコードと意味的には一緒になる。今までは以下のコードの方がわかりやすくて好みだった。
if canceled { return }
よくよく考えてみると、 guard
は条件のところに前提条件を記載するようになっている。すなわち、「これは前提条件だ。保てないなら、elseの先へ」という感じ。こう捉えると、guardも読みやすくなった。
guard !canceled else { return } // キャンセルされてない状態が前提条件だよ!守れないならさよなら!
前々チームで一緒だった人に教えてもらったけど、guard
の else
の先は return
するなり throw
するなり、フローから抜けることが強制されるらしい。知らなかった。うっかり抜け忘れるということがなくていいですね。