Conversation
| // Я сделал так, чтобы каждый раз при обновлении меню список создавался заново. | ||
| // Иначе новые архивы не появлялись бы. | ||
| fun showMenu(title: String, itemsBuilder: () -> MutableList<MenuItem>) { | ||
| while (true) { |
There was a problem hiding this comment.
Не рекомендую писать бесконечные циклы через while (true) - лучше всегда явно прописывать условие выхода из цикла, чтобы уменьшить вероятность ошибиться и повысить читабельность кода
| items[index].action() | ||
|
|
||
| // Если это был пункт "Выход", то прерываем цикл while и выходим из меню | ||
| if (items[index].title == "Выход") { |
There was a problem hiding this comment.
Служебную строку лучше вынести в константу, чтобы повысить читабельность кода и не копировать её всюду
|
|
||
| // Класс для архива. У него есть название и список заметок внутри. | ||
| // Используем MutableList, чтобы можно было добавлять новые заметки. | ||
| class Archive(val title: String, val notes: MutableList<Note>) |
There was a problem hiding this comment.
В data классах не рекомендуется хранить мьютабельные данные (в данном случае MutableList), т.к. в многопоточных средах могут возникнуть проблемы с такими объектами, а именно с доступом к чтению и записи изменяемых полей. У data классов автоматически генерируется функция copy, которую можно использовать для изменения полей объекта с помощью его копирования
Добрый день!
Направляю на проверку консольное приложение "Заметки".
Что было сделано:
Models.kt— для данных (Archive, Note).Menu.kt— универсальный класс для отображения меню и обработки ввода.Screens.kt— основная логика переходов между экранами и хранение данных.💡 Особенности реализации:
В процессе работы столкнулся с проблемой, что при добавлении нового архива он не появлялся в меню, так как список передавался один раз.
Решил эту проблему, передавая в класс Menu не готовый список, а лямбду (builder), которая пересобирает список пунктов при каждом обновлении экрана. Теперь новые данные отображаются корректно сразу после создания.
Также добавил README.md с описанием функционала и инструкцией по запуску.
Буду рад обратной связи!