switch文が好きではなく使うのを避け、if文を使っていた。しかし、Swiftのenumはswitch文で分岐したほうが良いと思った。enumの宣言値が増えた時にswitch〜caseで拾い漏れしているとコンパイラが検出してくれるからだ。
var operation: Operation = .new
func testSwitch() {
switch operation {
case .new:
doSomething()
case .create:
doSomething()
case .edit:
doSomething()
// case .update:
// doSomething()
}
}
上記はupdateがないとdefaultを入れたほうが良いのでは?とコンパイルエラーになる。defaultを意図的に使わないようにすると、enumに新たな定義が追加された時、条件分岐漏れがあることを検出できるて良さそうだ。
ちなみにkotlinは同様のコードでコンパイルエラーにはならなかった。switchではなくwhenですが。
enum class Operation {
NEW, CREATE, EDIT, UODATE
}
var operation: Operation = Operation.NEW
fun testSwitch() {
when (operation) {
Operation.NEW -> doSomething()
Operation.CREATE -> doSomething()
Operation.EDIT -> doSomething()
// Operation.UODATE -> doSomething()
}
}
でも見た目もスッキリするしいいかなと思う。処理が複数行ある時もきれいだ。
enum class Operation {
NEW, CREATE, EDIT, UODATE
}
var operation: Operation = Operation.NEW
fun testSwitch() {
when (operation) {
fun testSwitch2() {
when (operation) {
Operation.NEW -> {
doSomething()
doSomething()
doSomething()
}
}
}
今さらだけど、私が嫌っていたのはswitch文ではなく、C言語のswitch文中に必要なbreakだったと気がついた・・・