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