Как сделать возврат данных только при определенном условии?

Возник вопрос, есть ли возможность вернуть данные из функции только при определенном условии, т. е.:

fun foo(): Int {
    if (условие верно) {
        вернуть число
    }
    здесь я не хочу возвращать, т. к. не получаю то, что возвращаю сверху
}

Ответы (1 шт):

Автор решения: Vadik

Вы пишете, что ничего не хотите возвращать, давайте рассмотрим варианты, как это можно сделать:

  1. Сделать так, чтобы программа зависла:

    fun foo(): Int {
        if (условие) {
            return число
        }
        while(true) {
            // Никогда не выходим из цикла, программа зависает
        }
    }
    
  2. Сделать так, чтобы программа завершилась с ошибкой:

    fun foo(): Int {
        if (условие) {
            return число
        }
        throw Error("Не знаю что вернуть, поэтому просто упаду")
    }
    
  3. Поменять тип на Int? и все-таки вернуть, но пустоту (null):

    fun foo(): Int? {
        if (условие) {
            return число
        }
        return null
    }
    
  4. Частый кейс в программировании, если вы хотите сообщить потребителю функции foo, что ее используют неправильно, то делайте так:

    fun foo(): Int {
        if (!условие) {
            throw IllegalStateException("Сейчас не то состояние, чтобы меня вызывать")
        }
        return число
    }
    

    То же самое, но более красиво, с помощью стандартной функции check:

    fun foo(): Int {
        check(условие) { "Сейчас не то состояние, чтобы меня вызывать" }
        return число
    }
    
→ Ссылка