Перейти к содержанию

🗒 Задача

Скопируй класс из предыдущей задачи (без логики заполнения телефонной книги) и измени его название для избегания конфликтов.

Для получения номера программа считывает ввод пользователя с типом String по умолчанию. Приведи строку к типу Long. Если пользователь ввел что-либо, кроме цифр — программа падает.

Необходимо избежать падения программы при попытке приведения строки к типу Long. Отлови ошибку и выведи ее название в консоль.

❌ Ошибки

  • не используют try catch вообще

✏️ Комментарии

Использование оператора `!!` подразумевает, что ты уверен в том, что значение не может быть `null`. Однако, если это не так, то приложение "упадет" с ошибкой. Поэтому этот оператор считается опасным и не рекомендуется использовать. Только в крайних случаях. 

Это противоречит основной идее безопасности типов в Kotlin, поэтому лучше использовать альтернативные способы обработки нулабельных значений. Такие как оператор безопасного вызова `?.`, элвис-оператор `?:` или оператор `let`.
Чтобы отловить ошибку воспользуйся блоком try catch. Подробнее о нем и о способе применения можно посмотреть [здесь](https://kotlinlang.org/docs/exceptions.html#exception-classes)
можно объединить создание переменной `number` с try catch таким образом:
val number = try {
        readln().toLong()
}
catch (e: Exception) {
        println("Ошибка: ${e.javaClass.simpleName}")
        println("Текст ошибки: ${e.message}")
        null
}

🧾 Решение

// класс и объект можно не создавать (игнорировать наличие или отсутствие)

fun main() {
    println("Введите номер телефона: ")
    val phoneInput = readln()

    try {
        val phoneNumber = phoneInput.toLong()
        println("Введенный номер: $phoneNumber")
    } catch (e: NumberFormatException) {
        println("Произошла ошибка: ${e::class.simpleName}")
    }
}