Exceptionを投げる関数を実装するときはどのように実装しますか?通常は下記のように書くことが多いのではないでしょうか?

// 成功の場合はtrueを返す、失敗の場合はfalseを返す
fun randomFunction(): Boolean {
  var outcome = false
  try {
    val response = useCase.execute()
    _liveData.postValue(response)
    outcome = true
  } catch (e: Exception) {
    outcome = false
  }
  return outcome
}

try-catchするのも良いのですが、ネストも深くなるしコードが突然catch内に飛ぶし、var変数使わないといけない場面があったりして不便ですし個人的にも嫌いですw。そういうときはrunCatchingを使います。

fun randomFunction(): Boolean {
  val result = useCase.execute()
  if (result.isSuccess) _liveData.postValue(result.getOrThrow())
  return result.isSuccess
}

runCatchingを使うとネストも深くならないし、コードも飛ばないしvarを使う場面も減らせます。runCatchingの結果はResult型で返ってきてResult::isSuccess、Result::isFailure、Result::onSuccess()、Result::onFailure{}、、Result::getOrThrow()、Result::getOrNull()、Result::exceptionOrNull()等の便利な関数も用意されております。try-catchはやめてrunCatchingを使いましょう。