Kotlin の if と when の使い分け

に公開

if と when の使い分け

細々な点ですが、 if と when のどちらを使うか迷った際の私なりの指標を残したいと思います。

when を使うと良いケース

3 つ以上の明確な条件分岐があり、かつ、一つの値について判定する場合は、 when を使うと簡潔に記述できます。

when (status) {
    Status.Loading -> showLoading()
    Status.Success -> showContent()
    Status.Error -> showError()
}

if を使うと良いケース

条件分岐が二つしかなく、かつ、二つ目が else の場合は、 if を使うと簡潔に記述できます。

_uiState.update {
    if (resultFailure) {
        // 削除に失敗した場合
        it.copy(userMessage = R.string.common_delete_failed)
    } else {
        // 削除に成功した場合
        it.copy(showDelCompDialog = true)
    }
}

これをもし、 when で記述すると以下のようになります。

_uiState.update {
    when (resultFilure) {
        true -> {
            // 削除に失敗した場合
            it.copy(userMessage = R.string.common_delete_failed)
        }

        false -> {
            // 削除に成功した場合
            it.copy(showDelCompDialog = true)        
        }
    }
}

when の場合は、ネストが一段深くなる可能性が高いため、 when の内側にさらに別の when が入る場合などは、 if に比べてどんどんとネストが深くなっていく可能性があります。

Discussion