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からは返り値がString
のreadln()
が使えるようになり、わざわざ!!
を付ける必要がなくなりました。また、これまでの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.