ある昼下がりの一室

色々と書いたり書かなかったりします

Kotlin 1.6.0で標準入力

この記事はNCCアドベントカレンダー1日目の記事です。

2021年11月16日にKotlin 1.6.0がリリースされました。そこで、標準入力に関する変更がありました。

New readline functions

Kotlin 1.6.0 offers new functions for handling standard input: readln() and readlnOrNull().

これまで、標準入力を行う際にはreadlne()を使っていました。しかし、返り値がString?のため、競プロで使う場合などは毎回!!を付けて非null許容型にしていました。それが、1.6からは返り値がStringreadln()が使えるようになり、わざわざ!!を付ける必要がなくなりました。また、これまでのreadline()readlnOrNull()になり、nullを許容するかしないか明確になりました。

実際の使用例はこのようになります。

1つの整数を読み込む場合

// val n = readline()!!.toInt()
val n = readln().toInt()

一行に複数の整数が空白区切りで渡される場合

// val list = readline()!!.split(" ").map{ it.toInt() }
val list = readln().split(" ").map{ it.toInt() }

素数nを入力し、続くn行に要素を入力していく場合

val n = readln().toInt()
val list = List(n) {
    readln().toInt()
}

当然ですが、標準入力の関数が変わった以外は変わってないです。競プロにおいて1.6.0のサポートは当然来ていないのでこれを競プロ使えるのがいつになるのか分かりませんが…。1.0.0のところはさっさとアップデートしてほしい

余談ですが、これらの関数は現状Kotlin/JSでは使えません。

Currently this function is not supported in Kotlin/JS and throws UnsupportedOperationException.