На этом шаге мы рассмотрим алгоритм выделения кода в функцию.
Логика, которую вы написали для NyetHack в предыдущих шагах, была разумной, но лучше было бы организовать код в функции. Наше первое задание: реорганизовать проект и инкапсулировать большую часть логики в функции. Это подготовит почву для добавления новых возможностей в NyetHack.
Означает ли это, что придется удалить весь код и переписать всю программу? Боже упаси. IntelliJ поможет вам сгруппировать логику в функции.
Начнем с того, что откроем проект NyetHack. Убедитесь, что файл Game.kt открыт в редакторе. Далее выделите условное выражение, которое записывает сообщение о состоянии игрока в healthStatus. Нажмите левую кнопку мыши и, удерживая ее, протяните указатель мыши от первой строки с объявлением healthStatus, до конца выражения, включая закрывающую фигурную скобку. Примерно так:
Рис.1. Выделение фрагмента
Щелкните правой кнопкой мыши на выделенном фрагменте. Выберите в контекстном меню пункт Refactor | Function... (рисунок 2).
Рис.2. Выделение кода в функцию
Появится диалоговое окно Выделения функции, как на рисунке 3.
Рис.3. Диалоговое окно выделения функции
Элементы этого окна мы рассмотрим чуть ниже. А пока введите "formatHealthStatus" в поле Name, как показано выше, а все остальное оставьте как есть. После этого нажмите OK. IntelliJ добавит определение функции в конец файла Game.kt, как показано ниже:
private fun formatHealthStatus(healthPoints: Int, isBlessed: Boolean): String { val healthStatus = when (healthPoints) { 100 -> "is in excellent condition!" in 90..99 -> "has a few scratches." in 75..89 -> if (isBlessed) { "has some minor wounds but is healing quite quickly!" } else { "has some minor wounds." } in 15..74 -> "looks pretty hurt." else -> "is in awful condition!" } return healthStatus }
Рис.4. Добавление новой функции
В нашей функции formatHealthStatus появился новый код. Давайте разберем его.
На следующем шаге мы рассмотрим строение функции.