Вы разрабатываете библиотеку для разработчиков Android? Мы точно знаем, что библиотеки - это не волшебные заклинания! Они разрабатываются кем-то вроде нас, и подразумевается общий механизм разработки, который может точно соответствовать нашим требованиям, а может и нет! Итак, есть крайние случаи, когда библиотеки будут генерировать исключения, и мы несем полную ответственность за то, чтобы тщательно об этом позаботиться.

Давайте рассмотрим, например, когда у вас есть библиотека холста, где разработчик должен создать экземпляр вашего настраиваемого представления с минимальной шириной 50dp. Вместо этого, когда он создает настраиваемое представление для значения, меньшего, чем требуемое, вы выдаете ему исключение, в котором говорится, что требуемое условие не выполнено.

О чем я говорю?

Я просто говорю о том, как облегчить вашу жизнь, когда вы разрабатываете библиотеку, где совершенно нормально бросить исключение разработчикам в его лицо, а не сбивать с толку пользователя.

Существуют предварительные условия Kotlin, которые представляют собой функции расширения и простой способ проверить все ваши предварительные условия. Взгляните на следующий код.

Просто выполните поиск по запросу Preconditions.kt, и вы увидите следующие важные функции расширения.

public inline fun require(value: Boolean): Unit = 
require(value) { "Failed requirement." }
public inline fun check(value: Boolean): Unit 
= check(value) { "Check failed." }

public inline fun error(message: Any): Nothing = 
throw IllegalStateException(message.toString())

Нет большой разницы между функцией require и check?

Тогда в чем разница между двумя разными функциями, которые выполняют одинаковую работу? Ну, буквально, кроме двух разных типов исключений, когда есть ложное условие, между ними нет никакой разницы.

Если вы хотите бросить IllegalArgumentException, используйте require(), а когда вы хотите бросить IllegalStateException, используйте check(), и функция error() говорит сама за себя. Он также имеет две функции расширения проверки null: requireNotNull() и checkNotNull()

Спасибо за быстрое чтение :)