Поиск по сайту:

Kotlin print(), println(), readLine(), сканер, REPL


Сегодня мы узнаем, как использовать функции печати Kotlin и как получать и анализировать пользовательский ввод из консоли. Кроме того, мы рассмотрим Kotlin REPL.

Функции печати Kotlin

Для вывода чего-либо на экран используются следующие два метода:

  • печать()
  • println()

Оператор print выводит на экран все, что находится внутри него. Оператор println добавляет новую строку в конец вывода. Операторы печати внутренне вызывают System.out.print. Следующий код показывает операторы печати в действии:

fun main(args: Array<String>) {
var x = 5
print(x++)
println("Hello World")
print("Do dinasours still exist?\n")
print(false)
print("\nx is $x.")
println(" x Got Updated!!")
print("Is x equal to 6?: ${x == 6}\n")    
}

Escape-литералы и выражения

Чтобы избежать символа доллара и, скажем, рассматривать $ {выражение} только как строку, а не вычислять ее, мы можем ее избежать.

fun main(args: Array<String>) {
val y = "\${2 == 5}"
println("y = ${y}")       
println("Do we use $ to get variables in Python or PHP? Example: ${'$'}x and ${'$'}y")
val z = 5
var str = "$z"
println("z is $str")
str = "\$z"
println("str is $str")
}

Печать значений функции

fun sumOfTwo(a: Int, b: Int) : Int{
    return a + b
}

fun main(args: Array<String>) {
val a = 2
val b = 3
println("Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}") 
println(println("Printing Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}"))    
}

Пользовательский ввод Kotlin

Чтобы получить пользовательский ввод, можно использовать следующие два метода:

  • readLine()
  • Класс сканера

Примечание. Для пользовательского ввода требуется инструмент командной строки. Вы можете использовать REPL или IntelliJ. Давайте воспользуемся здесь IntelliJ.

Использование readLine()

readLine() возвращает значение типа String? чтобы иметь дело с нулевыми значениями, которые могут возникнуть при чтении конца файла и т. д. В следующем коде показан пример использования readLine()

fun main(args: Array<String>) {
    println("Enter your name:")
    var name = readLine()
    print("Length is ${name?.length}")
}

Как видите, нам нужно развернуть тип, допускающий значение NULL, чтобы использовать функции типа String для свойства. Использовать !! принудительно преобразовать строку? в String, только если вы абсолютно уверены, что значение не будет нулевым. Иначе рухнет. Преобразование входных данных в Integer Чтобы преобразовать входную строку в Int, мы делаем следующее:

fun main(args: Array<String>) {
var number = readLine()
try {
        println("Number multiply by 5 is ${number?.toInt()?.times(5)}")
    } catch (ex: NumberFormatException) {
        println("Number not valid")
    }
}

Мы снова используем оператор ?. для преобразования типа, допускающего значение NULL, сначала в Int с помощью toInt(). Затем мы умножаем его на 5. Непрерывное чтение ввода Мы можем использовать цикл do while для непрерывного чтения ввода, как показано ниже.

    do {
        line = readLine()

        if (line == "quit") {
            println("Closing Program")
            break
        }

        println("Echo $line")

    } while (true)
}

Чтение нескольких значений с использованием оператора разделения

Мы можем прочитать несколько значений, разделенных разделителями, и сохранить их в форме кортежа, как показано ниже.

fun readIntegers(separator: Char = ',')
        = readLine()!!.split(separator).map(String::toInt)

fun main(args: Array<String>) {
    println("Enter your values:")
    try {
        val (a, b, c) = readLine()!!.split(' ')
        println("Values are $a $b and $c")
    } catch (ex: IndexOutOfBoundsException) {
        println("Invalid. Missing values")
    }

    try {
        val (x, y, z) = readIntegers()
        println("x is $x y is $y z is $z")
    } catch (ex: IndexOutOfBoundsException) {
        println("Invalid. Missing values")
    }
    catch (ex: NumberFormatException) {
        println("Number not valid")
    }

}
val ints: List<String>? = readLine()?.split("|".toRegex())
println(ints)

Класс сканера Kotlin

Для ввода мы можем использовать Scanner(System.\\in\\), который принимает ввод со стандартной клавиатуры ввода. Следующий код демонстрирует то же самое:

fun main(args: Array<String>) {
    val reader = Scanner(System.`in`)
    print("Enter a number: ")

    // nextInt() reads the next integer. next() reads the String
    var integer:Int = reader.nextInt()

    println("You entered: $integer")

reader.nextInt() читает следующее целое число. reader.next() читает следующую строку. reader.nextFloat() читает следующее число с плавающей запятой и так далее. reader.nextLine() передает сканер на следующую строку, а также очищает буфер. Следующий код демонстрирует чтение различных типов входных данных непосредственно внутри оператора печати.

import java.util.*

fun main(args: Array<String>) {

    val reader = Scanner(System.`in`)
    print("Enter a number: ")

    try {
        var integer: Int = reader.nextInt()
        println("You entered: $integer")
    } catch (ex: InputMismatchException) {
        println("Enter valid number")
    }
    enterValues(reader)
    //move scanner to next line else the buffered input would be read for the next here only.
    reader.nextLine()
    enterValues(reader)
}

fun enterValues(reader: Scanner) {
    println("Enter a float/boolean :")
    try {
        print("Values: ${reader.nextFloat()}, ${reader.nextBoolean()}")
    } catch (ex: InputMismatchException) {
        println("First value should be a float, second should be a boolean. (Separated by enter key)")
    }
}

Котлин REPL

REPL, также известный как Read-Eval-Print-Loop, используется для прямого запуска части кода в интерактивной оболочке. Мы можем сделать это в нашем терминале/командной строке, запустив компилятор kotlin.

Установка компилятора командной строки

Мы можем установить компилятор командной строки на Mac/Windows/Ubuntu, как показано здесь. Как правило, на Mac мы можем использовать HomeBrew на нашем терминале для установки компилятора kotlin.

brew update
brew install kotlin