coffee break

某の情報系大学院生

Kotlinの標準入力でつっかかった

最近Kotlinの勉強を始めた。Kotlinを知ったきっかけは、今年の5月にGoogleがKotlinをAndroid開発言語として正式にサポートするとの発表をしたことだ。当時大学の講義でJavaを勉強中だった僕にとって、たかが標準出力のだけに毎回System.out.printlnと打たなきゃいけないのがストレスでしょうがなかった。しかしKotlinではprintlnだけで済む。さらにhello worldのサンプルコードを見た時に、main関数がクラスに属する必要がないことも知って衝撃を受けた。調べるほどにKotlinの魅力にはまっていき、夏休み期間に入ったこともあってようやく本格的にKotlinの勉強を始めることができた。

今回は標準入力の際にはまったことを記録しておく。KotlinはJava100%相互互換を謳っているので当然JavaのScannerも使える。JavaでScannerを使うには以下のように書けばいい。便宜上いろんなところを省いている。

import java.util.Scanner;

Scanner scan = new Scanner(System.in);

これに倣ってKotlinでも以下のように書くとコンパイルエラーとなる。

import java.util.Scanner

val scan = Scanner(System.in)

これはKotlinではinが予約語であるからではないかと思っている。(詳しく調べてないのであくまで推測)
なので色々調べるとScanner.`in`と書けばいいということはわかった。しかし`の打ち方で時間を食われた。何せ今まで使ったことなかった記号なので…
記号の名前はバッククォート、キーボード入力するときはShift+@だ。キーボードを見ればわかるのに見つけられなかった自分が恥ずかしい…
以上を踏まえてKotlinでの正しいScannerの使い方は以下のよう

import java.util.Scanner

val scan = Scanner(System.`in`)

あとはjavaと同じようにscan.nextInt()などを使って操作する。