scala – API设计 – 在条件超出范围的前置条件检查中混合使用?
发布时间:2020-12-16 18:37:05 所属栏目:安全 来源:网络整理
导读:我正在设计一个类似这样的API: // Drop $howMany items from after $from def dropElements[T](array: Array[T],from: Int,howMany: Int) 预期的行为是howMany应该是非负的,如果howMany为零,它不应该做任何修改.我有两种方法来实现这个: def dropElements[
我正在设计一个类似这样的API:
// Drop $howMany items from after $from def dropElements[T](array: Array[T],from: Int,howMany: Int) 预期的行为是howMany应该是非负的,如果howMany为零,它不应该做任何修改.我有两种方法来实现这个: def dropElements[T](array: Array[T],howMany: Int) { assert(howMany >= 0); if (howMany == 0) return; assert(0 <= from && from < array.length); .... } 要么: def dropElements[T](array: Array[T],howMany: Int) { assert(howMany >= 0); assert(0 <= from && from < array.length); if (howMany == 0) return; .... } 我赞成第二种方法(预先声明你的先决条件)与第一种方法相比,但有人指出,当howMany = 0时,第一种方法更加尊重要求. 有任何想法或利弊吗?我问的是designer of a standard collections library 解决方法
我的想法,它的价值:
我认为在所有情况下对from进行绑定检查更为一致.无论howMany的值如何,越界都可能是调用者代码中的错误.对我来说,在这种情况下最好是失败快. 我并不认为这违反了要求.至少,我(作为你api可能的未来用户)不会对这种行为感到惊讶. 此外,正如您所指出的那样,提前预备条件更具可读性. 所以我的第二种方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |