- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这个问题的答案是否可能是主观的,(而且我还没有找到类似的问题)但我的问题如下:
我在互联网/文献上看到过不同来源的代码片段,其中一个来 self 项目中的队友。通常他们中的一些人会采用类似...的方法
if(a == true && b == false || c == true) {}
在我看来,if 语句可能是
如果 a 为真且 b 为假或 c 为真
或者(口译员可能理解的内容,即使对我来说也是如此)
如果a为真且b为假或c为真
由于我的这种冲突,我必须正确思考什么陈述可以是A) executed or B) 本来是Codewriter的意思,我一直用自己的模式来让别人更容易理解,如下...
if(a == true && (b == false || c == true)) {}
或
if((a == true && b == false) || c == true) {}
或(更好的可读性,因为我认为括号内的子语句应该放在最后,而不是第一个)
if(c == true || (a == true && b == false)) {}
现在我错了吗?如果我是对的,是否有支持这种语法的设计模式?尽管我认为这是一种更好的方法,但 Resharper 却不这么认为并认为它是多余的。
另一方面,我想以任何方式学习更好的代码,如果我的队友做错了,我也应该让他们有机会变得更好,同时他们的代码也变得更具可读性(如果这是真的)
编辑:这与 If 语句如何工作或 bool 值或其优先级如何工作无关。它是关于在默认情况下不需要的语句中添加额外的括号(例如不需要编码中的注释),但可能是一种模式(例如注释或其他设计模式)有助于更清晰的编码。
最佳答案
看看 Precedence and Order of Evaluation在 MSDN 上。
关于您的示例,if (a == true && b == false || c == true)
被评估为 if (a is true AND b is false)或 c 为真
,因为 && 的求值顺序高于 ||。
就可读性而言,我不会明确评估 == true
或 == false
。
这可读性差,也不那么干净......
if (a == true && b == false || c == true) { ... }
这更具可读性和更清晰...
if(a && !b || c) { ... }
Resharper 提示是因为您不需要明确指定求值顺序,如果它与没有括号的顺序完全相同,例如:
if ((a && !b) || c) { ... }
与 if (a && !b || c) { ... } 相同
因此额外的括号是多余的,并且会增加代码的噪音,因此可读性差。
如果您需要显式更改求值顺序,Resharper 不应提示,例如:
if (a && (!b || c)) { ... }
关于设计模式,没有任何关于 OOP 设计模式的想法。这似乎更适合来自函数式编程世界的方面,例如模式匹配。
关于c# - C# If 语句的设计模式或(文献)最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49937969/
创建一个“海盗对话”,可以选择左手或右手。我希望它对“左”和“右”的不同拼写做出积极的回答(正如您将在代码中看到的那样),但是,当我为所有非“右”或“左”的输入添加最终的“else”代码时,它给了我一
With 语句 对一个对象执行一系列的语句。 With object statements End With 参数 object 必需的部分
While...Wend 语句 当指定的条件为 True 时,执行一系列的语句。 While condition  ; Version [stat
所以我正在处理的代码有一个小问题。 while True: r = input("Line: ") n = r.split() if r == " ":
我有一个对象数组: var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number"
int main() { int f=fun(); ... } int fun() { return 1; return 2; } 在上面的程序中,当从main函数中调用一个
我的项目中有很多 if 语句、嵌套 if 语句和 if-else 语句,我正在考虑将它们更改为 switch 语句。其中一些将具有嵌套的 switch 语句。我知道就编译而言,switch 语句通常更
Rem 语句 包含程序中的解释性注释。 Rem comment 或 ' comment comment 参数是需要包含的注释文本。在 Rem 关键字和 comment 之间应有一个空格。
ReDim 语句 在过程级中声明动态数组变量并分配或重新分配存储空间。 ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Randomize 语句 初始化随机数生成器。 Randomize [number] number 参数可以是任何有效的数值表达式。 说明 Randomize 使用 number 参数初始
Public 语句 定义公有变量并分配存储空间。在 Class 块中定义私有变量。 Public varname[([subscripts])][, varname[([subscripts])
Sub 语句 声明 Sub 过程的名称、参数以及构成其主体的代码。 [Public [Default]| Private] Sub name [( arglist )]
Set 语句 将对象引用赋给一个variable或property,或者将对象引用与事件关联。 Set objectvar = {objectexpression | New classname
我有这个代码块,有时第一个 if 语句先运行,有时第二个 if 语句先运行。我不确定为什么会这样,因为我认为 javascript 是同步的。 for (let i = 0; i < dataObje
这是一个 javascript 代码,我想把它写成这样:如果此人回答是,则回复“那很酷”,如果此人回答否,则回复“我会让你开心”,如果此人回答的问题包含"is"或“否”,请说“仅键入”是或否,没有任何
这是我的任务,我尝试仅使用简短的 if 语句来完成此任务,我得到的唯一错误是使用“(0.5<=ratio<2 )”,除此之外,构造正确吗? Scanner scn = new Scanner(
有没有办法在 select 语句中使用 if 语句? 我不能在这个中使用 Case 语句。实际上我正在使用 iReport 并且我有一个参数。我想要做的是,如果用户没有输入某个参数,它将选择所有实例。
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: If vs. Switch Speed 我将以 C++ 为例,但我要问的问题不是针对特定语言的。我的意思是一
Property Set 语句 在 Class 块中,声明名称、参数和代码,这些构成了将引用设置到对象的 Property 过程的主体。 [Public | Private] Pro
Property Let 语句 在 Class 块中,声明名称、参数和代码等,它们构成了赋值(设置)的 Property 过程的主体。 [Public | Private] Prop
我是一名优秀的程序员,十分优秀!