На этом шаге мы приведем пример использования целочисленных значений.
Ранее мы узнали, что целочисленное значение - это число, не имеющее дробной части, то есть целое число, и в Kotlin оно представлено типом Int. Int хорошо подходит для выражения качественных или количественных показателей: остатков пинт меда, числа посетителей таверны или количества монет у игрока.
Настало время немного покодить. Откройте Tavern.kt и добавьте переменные типа Int для представления количества золотых и серебряных монет у игрока в кошельке. Раскомментируйте вызов placeOrder() с заказом напитка Dragon's Breath и удалите заказ напитка Shirley's Temple.
Добавьте заготовку функции performPurchase(), которая будет обрабатывать логику покупки, и функцию, отображающую содержимое кошелька игрока. Вызовите новую функцию performPurchase() в placeOrder().
const val TAVERN_NAME = "Taernyl's Folly" var playerGold = 10 var playerSilver = 10 fun main() { placeOrder("shandy,Dragon's Breath,5.91") // placeOrder("elixir,Shirley's Temple,4.12") } fun performPurchase() { displayBalance() } private fun displayBalance() { println("Player's purse balance: Gold: $playerGold, Silver: $playerSilver") } private fun placeOrder(menuData: String) { val indexOfApostrophe = TAVERN_NAME.indexOf('\'') val tavernMaster = TAVERN_NAME.substring(0 until indexOfApostrophe) println("Madrigal speaks with $tavernMaster about their order.") val (type, name, price) = menuData.split(',') val message = "Madrigal buys a $name ($type) for $price." println(message) performPurchase() val phrase = if (name == "Dragon's Breath") { "Madrigal exclaims: ${toDragonSpeak("Ah, delicious $name!")}" } else { "Madrigal says: Thanks for the $name." } println(phrase) } private fun toDragonSpeak(phrase: String) = phrase.replace(Regex("[aeiouAEIOU]")) { when (it.value) { "a", "A" -> "4" "e", "E" -> "3" "i", "I" -> "1" "o", "O" -> "0" "u", "U" -> "|_|" else -> it.value } }
Рис.1. Изменение приложения (Tavern.kt)
Обратите внимание: вы использовали Int для передачи количества монет игрока. Максимальное количество монет в кошельке (и в известной части вселенной NyetHack) значительно меньше максимального значения Int в 2147483647.
Запустите Tavern.kt. Вы еще не реализовали логику оплаты заказа игроком, поэтому в этот раз герой получает свой заказ за счет заведения:
Madrigal speaks with Taernyl about their order. Madrigal buys a Dragon's Breath (shandy) for 5.91. Player's purse balance: Gold: 10 , Silver: 10 Madrigal exclaims: Ah, d3l1c10|_|s Dr4g0n's Br34th!
Рис.2. Результат работы приложения
На следующем шаге мы рассмотрим дробные числа.