You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于流畅接口的布尔值校验:位运算符是否为最优实现方案?

编辑:解决方案

答案:根据评论反馈,逻辑运算符&&和||可以正常工作。

替换后的代码:

bitwise(bool) {
    // 替换原有代码
    // this.valid = this.valid & (bool >> 0) 
    // 改为如下代码
    this.valid = this.valid && bool  
 }
问题

我用构建器模式结合流畅方法实现了一套灵活的值校验方案,校验结果可通过toBoolean()返回布尔值,也能通过toFail()触发失败逻辑。为维护所有断言的状态,我采用了位运算符,但esLint和IDE都会对位运算符的使用发出警告。

预期输出

  • toBoolean():返回所有断言的综合校验结果
  • toFail():返回原始值,若任一断言失败则抛出错误

当前解决方案

对布尔值执行位运算,代码如下:

class Validator {
  constructor(any) {
    this.any = any
    this.valid = true
  }
  bitwise(bool) {
    this.valid = this.valid & (bool >> 0)
    !this.valid || this.orFail()
  }
  isValue() {
    this.bitwise(isValue(this.any)) // isValue用于检测null和undefined
    return this
  }
  isObject() {
    this.bitwise(isObject(this.any))
    return this
  }
  isNotEmpty() {
    this.bitwise(!isEmpty(this.any))
    return this
  }
  toBoolean(){
    return this.valid
  }
  orFail(message = ""){
    if (!this.valid) {
      throw new InvalidProperty(`TypeError: property is invalid ${message}`);
    }
    return this.any
  }
}

可选替代方案

  • Array.every() 或 Array.some():用回调栈的方式更优雅,但仍需逻辑方法维护综合状态
  • 冗长的条件表达式:!A || !B || !C——扩展性差,属于静态实现

核心疑问

位运算符是不是唯一/最佳的实现方案?有没有更好的方式来实现这种流畅接口?

示例实现

const makeValidator = (any) => new Validator(any)

const isHydratedObjectOrFail = (any) => makeValidator(any)
  .isValue()
  .isNotEmpty()
  .isObject()
  .toFail()

const isObject = (any) => makeValidator(any)
  .isObject()
  .toBoolean()

内容的提问来源于stack exchange,提问作者Nolan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:43:12