【问题标题】:Best practice boolean logic multiple not equal to [closed]最佳实践布尔逻辑倍数不等于[关闭]
【发布时间】:2017-08-24 01:40:31
【问题描述】:

在编写带有多个“不等于”子句的布尔语句时,我相信有两种潜在的语法可以实现这一点,它们在功能上都是等效的。 c#示例:

1.

x != 1 && y != 1

2.

!(x == 1 || y == 1)

为了保持一致并决定最佳做法,两者有什么明显的优点/缺点吗?

谢谢

【问题讨论】:

  • advantages/disadvantages 可读性。
  • 照你说的写。在不同的上下文中可能会有所不同;-)
  • 我在心里想,优化开始了,并在第一个中说如果 x==1 然后它中止检查 y!=1 因为它在第一个障碍中失败了..
  • @BugFinder 是的,它确实有效,但它在所提到的两种情况下都有效,所以它们之间仍然没有区别。

标签: c# sql boolean equality


【解决方案1】:

它们确实是一样的,唯一的区别是可读性。通常我在代码中更频繁地看到第一个选项,我更喜欢这个(对我来说,更清楚的是你不希望它们等于某些东西)。但是,这是个人喜好。如果你愿意,你可以选择第二个,但只要确保你在整个项目中保持一致,以避免混淆。

【讨论】:

    【解决方案2】:

    从逻辑上讲,这两种形式根据De Morgan's laws是完全相等的。

    您应该根据问题的性质决定什么更有意义,以及其他程序员更容易理解什么。

    【讨论】:

      【解决方案3】:

      你的问题没有最佳实践,你的例子是简单的布尔代数任务,用逻辑析取表达式改变逻辑合取。 在现实生活中,在应用程序开发尤其是团队项目中,开发人员使用预定义的约定,例如 if 表达式可以修改,但变得难以阅读,他们使用最适合实际条件表达式的语法,如果条件听起来像“如果不是 A 而不是 B”他们写道 !A && !B。 另一方面,如果有对性能敏感的关键算法,你应该记住逻辑表达式最短执行方式的规则。例如,在大多数编程语言中,在您的示例中,表达式 !(x == 1 || y == 1) 将始终计算运算符 x == 1y == 1,与 x != 1 && y != 1 相比,如果 x != 1 满足条件,则不会计算 y != 1

      【讨论】:

      • 您关于“将始终计算运算符 x == 1 和 y == 1”的句子不正确 - 如果 x == 1 评估为 true - y == 1 将不会评估条件,完全相同与&& 运算符一样。
      • 你说得对,忘记提了。
      【解决方案4】:

      您提供的两个示例没有任何问题。它们都很好,这一切都归结为可读性和偏好。如果您在团队中工作,您应该遵循团队标准而不是过于复杂的代码。这确保了有一个常数并且每个人都能够轻松地阅读和理解逻辑。这可以提高生产力并加快调试速度。

      如果您正在从事个人项目,您可以做任何您喜欢的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-21
        • 2021-11-08
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多