Kotlinのprint()、println()、readLine()、Scanner、REPLを日本語で言い換えてください。「一つのオプションだけで結構です」。

今日は、Kotlinのプリント関数の使い方や、コンソールからのユーザー入力の取得と解析方法について学びます。さらに、Kotlin REPLについても見ていきましょう。

Kotlinのプリント関数

画面に何かを出力するためには、次の2つの方法が使われます。

  • print()
  • println()

print文は、それに含まれる全てのものを画面に出力します。println文は、出力の最後に改行を追加します。print文は、内部でSystem.out.printを呼び出します。以下のコードは、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")    
}
kotlin print println functions

リテラルと式を回避する。

ドル記号を回避し、${expression}を計算ではなくただの文字列として扱うためには、それをエスケープすればよい。

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")
}
kotlin print statements escaping literals

関数の値を印刷する機能

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 print statements printing functions

Kotlinのユーザー入力

ユーザーの入力を取得するためには、以下の2つの方法を使用することができます。

  • readLine()
  • Scanner class

注意:ユーザーの入力には、コマンドラインツールが必要です。REPLまたはIntelliJのいずれかを使用することができます。ここではIntelliJを使用しましょう。

readLine()を使用する

readLine()は、ファイルの終わりなどで発生する可能性のあるnull値を処理するために、型String?の値を返します。以下のコードは、readLine()を使用した例を示しています。

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

以下のように、プロパティのString型の関数を使用するためには、nullableな型をアンラップする必要があることがわかります。String?をStringに強制的に変換するためには、値がnullでないことが絶対に確実な場合にのみ「!!」を使用します。それ以外の場合は、エラーが発生します。入力をIntegerに変換するためには、以下のようにします。

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")
    }
}

Nullableな型を使って、まずtoInt()を使ってInt型に変換するために?.演算子を使います。そしてそれを5倍します。連続して入力を読むには、以下のようにdo whileループを使うことができます。

    do {
        line = readLine()

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

        println("Echo $line")

    } while (true)
}
kotlin print statements loop

split演算子を使用して複数の値を読み取る

以下のように、区切り文字で分けられた複数の値を読み取り、それらをタプル形式で保存することができます。

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")
    }

}
kotlin print statements split and exceptions
val ints: List<String>? = readLine()?.split("|".toRegex())
println(ints)

KotlinのScannerクラス

入力を受け取るために、標準入力キーボードから入力を取得するために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()はScannerを次の行に渡し、バッファもクリアします。次のコードは、直接プリント文内でさまざまな種類の入力を読み取る方法を示しています。

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)")
    }
}
kotlin scanner class

コトリンREPL

REPL(Read-Eval-Print-Loop)は、インタラクティブシェルでコードの一部を直接実行するために使用されます。ターミナル/コマンドラインでKotlinコンパイラを起動することで、これを実行することができます。

コマンドラインコンパイラをインストールする。

こちらで示されているように、Mac/Windows/Ubuntuでコマンドラインコンパイラをインストールすることができます。通常、Macでは、HomeBrewを使用してターミナル上でKotlinコンパイラをインストールできます。

brew update
brew install kotlin
kotlin REPL
コメントを残す 0

Your email address will not be published. Required fields are marked *