🗒 Задача¶
Создай программу, имитирующую авторизацию по коду из смс. Программа будет “высылать” код из четырех цифр (случайное число от 1000 до 9999).
Выведи его в консоль с текстом “Ваш код авторизации: N”. Далее программа запрашивает ввод кода, чтобы авторизоваться.
– Если код введён неверно – программа вышлет новый (отобразит в консоли) и снова будет запрашивать его ввод для попытки авторизации. – Если код введен верно – программа отображает приветствие и завершает работу.
❌ Ошибки¶
-
создают смс код в цикле по одному числу — рекомендовать оптимизированно делать (1000..9999).random()
-
вводят дополнительные переменные или условия для проверки пароля — проверять все с условии while
✏️ Комментарии¶
Все хорошо, но для большей элегантности предлагаю не инициализировать переменную внутри цикла. Чтобы каждый раз не выделялась память при пересоздании переменной.
Проверка дублируется. Мы уже написали в условии цикла, что код будет генерироваться и запрашиваться каждую итерацию. Поэтому welcome message можно просто написать за пределами цикла (после него).
Тут что-то с форматированием. Цикл вложенный в функцию main(), поэтому отступ обязателен. Также чтобы было понягляднее, особенно в большой программе, лучше обосабливать внутренние циклы и условия пустыми строками сверху и снизу.
Тут стоило бы более корректное название переменной дать. Технически это не интервал, а конкретно сгенерированное рандомное число
Давай обосабливать цикл пустыми строками, чтобы код не выглядел таким монолитным. Это общепринятая практика согласно [конвенции Kotlin](https://kotlinlang.org/docs/coding-conventions.html)
Смущает повторение кода инициализации переменной. Предлагаю переделать через реализацию с помощью `do while`
Обрати внимание, когда ставишь символ переноса строки – пробел не нужен. Иначе новая строка начинается с пробела.
Использование оператора `!!` подразумевает, что ты уверен в том, что значение не может быть `null`. Однако, если это не так, то приложение "упадет" с ошибкой. Поэтому этот оператор считается опасным и не рекомендуется использовать. Только в крайних случаях.
Это противоречит основной идее безопасности типов в Kotlin, поэтому лучше использовать альтернативные способы обработки нулабельных значений. Такие как оператор безопасного вызова `?.`, элвис-оператор `?:` или оператор `let`.
Но пока я рекомендую использовать более свежую функцию readln(), которая возвращает ненулябельный тип (все приводится к строке, даже null становится “null”).