Scala 2.13以降では、文字列型String
から各種の数値を得るためのメソッドが標準ライブラリに用意されており、これを使うことで簡単に文字列から数値を得られるようになっている。parseInt
やtoInt
と違ってエラーを起こさないので便利。
//> using scala 2.13.12 val s = "42" s.toIntOption // => Some(42) s.toLongOption // => Some(42L) s.toShortOption // => Some(42) s.toByteOption // => Some(42) s.toDoubleOption // => Some(42.0)
値が範囲外だったり変換できない場合はNone
が返る:
"foo".toIntOption // => None "65535".toByte // => None
このためパターンマッチを使って値を取り出して操作するのが定石となる:
val s: String = ... // なんらかの手段で文字列が返る s.toIntOption match { case Some(i) => // iにIntが入っている println(s"You got $i") case None => // 変換失敗した場合 println("Bad integer!") }
冗長なエラー処理を書かなくても良くなり、単にパターンマッチすれば良くなった。
変換に成功した場合にのみ処理したいときはmap
などを活用すればよい:
val s: String = ... s.toIntOption.map(_ * 2) // 変換できた場合はSomeの中身の数値を2倍にし、失敗した場合はNoneのまま
[https://www.scala-lang.org/api/2.13.12/scala/collection/StringOps.html#toIntOption:Option[Int]:embed:cite]