あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

引数の事前条件チェック

コンストラクタの引数や関数の引数がある条件を満たしているかの
事前のチェックは、require を使用する方法がある。

scala> def foo(a: Double, b: Double) = { require(b != 0); a / b }
foo: (a: Double, b: Double)Double

scala> foo(5, 2)
res0: Double = 2.5

scala> foo(4, 0)
java.lang.IllegalArgumentException: requirement failed
        at scala.Predef$.require(Predef.scala:145)
..snip..

assert でもよいかもしれないが引数チェックということでは
IllegalArgumentException を投げる require が良さそう。

scala> def bar(a: Double, b: Double) = { assert(b != 0); a / b }
bar: (a: Double, b: Double)Double

scala> bar(7, 2)
res1: Double = 3.5

scala> bar(5, 0)
java.lang.AssertionError: assertion failed
        at scala.Predef$.assert(Predef.scala:89)
..snip..

assert と require は Predef で定義されている