Lambdaカクテル

京都在住Webエンジニアの日記です

Scalaで文字列から数値を得るには.toIntOptionがオススメ

Scala 2.13以降では、文字列型Stringから各種の数値を得るためのメソッドが標準ライブラリに用意されており、これを使うことで簡単に文字列から数値を得られるようになっている。parseInttoIntと違ってエラーを起こさないので便利。

//> 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]

Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?