代码之家  ›  专栏  ›  技术社区  ›  Youp Bernoulli

大于或等于(基于布尔条件)

  •  1
  • Youp Bernoulli  · 技术社区  · 7 年前

    什么是大于或等于的简单构造,其中等分仅基于布尔参数应用。

    直截了当的方式(类型(Java)脚本):

    function isGreaterThanOrEqual(a: number, b:number, allowEqual: boolean = false): boolean {
      if(allowEqual){
        return a >= b;
      } else {
        return a > b
      }
    }
    

    我有一个(旋转)矩形碰撞检测方法,在其中进行了大量的比较。有时我想包括互相接触的矩形,有时不包括(它们必须“真正”重叠),这就是为什么这个选项是可选的 allowEqual 参数很有用。

    我想避免在这个方法的许多地方使用这个if语句,并且更喜欢一个优雅的一行代码。

    这可以用任何一种方法在一条直线上完成吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Nina Scholz    7 年前

    您可以通过返回更大检查或检查的值来使用分段方法。 allowEqual 还有身份检查。

    return a > b || allowEqual && a === b;
    
        2
  •  1
  •   Máté Safranka    7 年前
    return (a - b) >= (+(!allowEqual)) * Number.EPSILON;
    

    解释:

    如果 allowEqual true ,它的否定是被迫的 0 如此 a - b 必须至少 . 如果 全部相等 是假的,它的否定是被迫的 1 如此 乙型 必须至少是两个数字之间可能的最小距离。