Friday, 20 November 2015

Require v.s. Assert in Scala

1. Require

Require means that the caller of the method is at fault and should fix its call. Use require whenever you want a constraint on parameters, and throw an IllegalArgumentException. 

2. Assert

Assert means that your program has reached an inconsistent state this might be a problem with the current method/function.
You can use an assert to verify all the invariants everywhere in your program (all the preconditions/postconditions for every single method/function calls) and not pay the price in production.

def fac(i: Int) = {
  require(i >= 0, "i must be non negative") //this is for correct input

  @tailrec def loop(k: Int, result: Long = 1): Long = {
    assert(result == 1 || result >= k)   //this is only for verification

    if(k > 0) loop(k - 1, result * k) else result
  }

  loop(i)
}


Reference: http://stackoverflow.com/questions/26140757/what-to-choose-between-require-and-assert-in-scala

No comments:

Post a Comment