Путь наивного к мастерству.

На данный момент весь код, который мы написали в части 1 и части 2, нашего Hi Kotlin была в основном внутри функции main приложения. Это произошло потому, что функция main запускает наше приложение, так как это первая функция, которая выполняется при запуске приложения, этот подход работает нормально, поскольку мы только изучали базовый синтаксис kotlin. Но чтобы написать более организованное и простое в обслуживании приложение, нам нужно разделить наш код на отдельные функции.





В этой статье мы подробно рассмотрим, как работают функции, создав приложение «Камень, ножницы, бумага».

Что мы собираемся делать?

Мы собираемся создать приложение «Камень, ножницы, бумага». Когда приложение запускается, оно случайным образом выбирает камень, бумагу, ножницы. . Затем предлагает пользователю ввести допустимую опцию, если допустимый выбор предоставлен, подсказывает результат, иначе попросит пользователя ввести допустимую опцию.

Дизайн высокого уровня

Прежде чем мы напишем какой-либо код, нам нужен план действий о том, как он будет работать.
Вот основная идея того, что мы пытаемся сделать.

  1. Приложение загружается и случайным образом выбирает одно из значений в массиве параметров Камень, Бумага или Ножницы.
  2. Приложение запрашивает ввод данных пользователем
  3. Приложение проверяет введенные пользователем данные, т. е. является ли это допустимой опцией или нет,
    если это не так, то управление должно быть передано на шаг 2 до тех пор, пока не будет предоставлена ​​допустимая опция.
  4. Приложение отображает результат.

Вот что мы собираемся делать.

Мы разделим нашу задачу на несколько шагов.

  1. Получите приложение, чтобы выбрать вариант:
  2. Спросите/подтвердите выбор пользователя:
  3. Распечатайте результат:

✍ Получите приложение, чтобы выбрать вариант:

Как мы узнали из предыдущих статей, мы определяем новые функции, используя ключевое слово «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.

★СПАСИБО★