Путь наивного к мастерству.
На данный момент весь код, который мы написали в части 1 и части 2, нашего Hi Kotlin была в основном внутри функции main
приложения. Это произошло потому, что функция main запускает наше приложение, так как это первая функция, которая выполняется при запуске приложения, этот подход работает нормально, поскольку мы только изучали базовый синтаксис kotlin. Но чтобы написать более организованное и простое в обслуживании приложение, нам нужно разделить наш код на отдельные функции.
В этой статье мы подробно рассмотрим, как работают функции, создав приложение «Камень, ножницы, бумага».
Что мы собираемся делать?
Мы собираемся создать приложение «Камень, ножницы, бумага». Когда приложение запускается, оно случайным образом выбирает камень, бумагу, ножницы. . Затем предлагает пользователю ввести допустимую опцию, если допустимый выбор предоставлен, подсказывает результат, иначе попросит пользователя ввести допустимую опцию.
Дизайн высокого уровня
Прежде чем мы напишем какой-либо код, нам нужен план действий о том, как он будет работать.
Вот основная идея того, что мы пытаемся сделать.
- Приложение загружается и случайным образом выбирает одно из значений в массиве параметров Камень, Бумага или Ножницы.
- Приложение запрашивает ввод данных пользователем
- Приложение проверяет введенные пользователем данные, т. е. является ли это допустимой опцией или нет,
если это не так, то управление должно быть передано на шаг 2 до тех пор, пока не будет предоставлена допустимая опция. - Приложение отображает результат.
Вот что мы собираемся делать.
Мы разделим нашу задачу на несколько шагов.
- Получите приложение, чтобы выбрать вариант:
- Спросите/подтвердите выбор пользователя:
- Распечатайте результат:
✍ Получите приложение, чтобы выбрать вариант:
Как мы узнали из предыдущих статей, мы определяем новые функции, используя ключевое слово «fun», за которым следует имя функцииgetGameChoice
в нашем случае.
Мы можем отправлять/передавать данные в функцию как параметры, т.е. мы сообщаем компилятору, что getGameChoice
function примет параметр массив строк, который мы передали в функциональная переменная optionsParam .
Примечание. Если у функции есть параметр, мы должны передать его, и он должен быть соответствующего типа.
fun main() { val options = arrayOf("ROCK", "PAPER", "SCISSORS") val gameChoice = getGameChoice(options) } fun getGameChoice(optionsParam: Array<String>):String { return optionsParam[(Math.random()*optionsParam.size).toInt()] }
getGameChoice
функция будет случайным образом возвращать строковое значение из optionsParam, и функция возвращает ссылку на этот элемент, мы сохраняем эту ссылку в gameChoice
variable в основной функции, чтобы использовать ее позже .
✍ Спросите/подтвердите выбор пользователя:
Теперь наша следующая задача — спросить пользователя о его выборе и подтвердить его.
Как мы узнали из предыдущей статьи, функция readline() считывает строку ввода из стандартного потока ввода (окна IDE) и обрабатывает ее. вернет строковое значение.
Следовательно, наша функция kotlin должна иметь возможность проверять, не является ли введенное значение нулевым и принадлежит массиву параметров.
fun getUserChoice(optionsParam: Array<String>):String{ var isValidate = false var userChoice = "" while(!isValidate){ println("Please enter one of the following") for (item in optionsParam){ print(" $item") } println(".") //read User input val userInput = readLine() //validate user input if(userInput!= null && userInput in optionsParam){ isValidate = true userChoice = userInput } // if validation fails if(!isValidate){ print("Please enter the correct value") } } return userChoice }
Здесь флаг isValidate
используется для проверки того, подтвержден ли пользовательский ввод или нет, если он подтвержден, то !isValidate
flag в цикле while становится ложным, и цикл завершается, возвращая userChoice
как значение.
✍Распечатайте результат:
Последнее, что нам нужно, чтобы наше приложение сделало, это распечатало результат.
Приложение определит победителя по правилам, которые мы определили ранее.
Мы создадим функцию с именем printResult
, которая примет два параметра userChoice
и gameChoice
и выполнит серию проверок, чтобы определить победителя.
fun printResult(userChoice:String , gameChoice: String){ var result = "" // if the user and the game chose the same option the result is a tie. if(userChoice == gameChoice){ result = "!!TIE!!" } // if any of these combinations are true the user will win else if ((userChoice == "ROCK" && gameChoice == "SCISSORS") || (userChoice == "PAPER" && gameChoice =="ROCK") || (userChoice == "SCISSORS" && gameChoice == "PAPER")) result = "YOU WIN" // if the above condition didn't match then user will Lose else{ result = "YOU LOSE!!" } // print the final output println("User choice: $userChoice , Game choice: $gameChoice , Result: $result") }
Вот и все введение в функцию. Мы рассмотрели основные варианты использования функций, зачем нам нужны функции и как их писать.
✯ КОНЕЦ
★В следующей статье мы поговорим о функциях-2 в kotlin.