Ответ
runCatching – удобная обёртка для обработки исключений, но есть нюансы:
- Тип исключений: Ловит только
Throwable, включаяError(например,OutOfMemoryError), что не всегда нужно. - Подавление исключений: Если внутри блока
runCatchingесть ещёtry-catch, исключение может быть подавлено. - Null-безопасность: Возвращает
Result<T>, который может содержатьnull, если лямбда вернулаnull.
Пример:
val result = runCatching { someRiskyCall() }
.onFailure { if (it is IOException) log(it) } // Не все исключения нужно логировать
.getOrNull() // null, если было исключение
Лучше явно указывать типы исключений или использовать try-catch для сложных сценариев.