加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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可能的未来用户)不会对这种行为感到惊讶.

此外,正如您所指出的那样,提前预备条件更具可读性.

所以我的第二种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读