If statement 使用多个条件格式化if语句的最佳方法
如果您想根据两个或多个条件执行某些代码,那么格式化If语句的最佳方式是什么 第一个例子:-If statement 使用多个条件格式化if语句的最佳方法,if-statement,formatting,language-agnostic,If Statement,Formatting,Language Agnostic,如果您想根据两个或多个条件执行某些代码,那么格式化If语句的最佳方式是什么 第一个例子:- if(ConditionOne && ConditionTwo && ConditionThree) { Code to execute } if(ConditionOne) { if(ConditionTwo ) { if(ConditionThree) { Code to execute } } }
if(ConditionOne && ConditionTwo && ConditionThree)
{
Code to execute
}
if(ConditionOne)
{
if(ConditionTwo )
{
if(ConditionThree)
{
Code to execute
}
}
}
第二个例子:-
if(ConditionOne && ConditionTwo && ConditionThree)
{
Code to execute
}
if(ConditionOne)
{
if(ConditionTwo )
{
if(ConditionThree)
{
Code to execute
}
}
}
这是最容易理解和阅读的,记住每个条件可能是一个很长的函数名或其他东西。第一个条件更容易理解,因为如果从左到右阅读,您会得到: “如果某物、某物、某物、那么”,这是一个容易理解的句子。第二个例子是“如果某件事,那么如果某件事,那么如果另一件事,那么”,这很笨拙
也可以考虑,如果你想在你的子句中使用一些OR——你将如何用第二种方式来做?< /P> < P>其他答案解释了为什么第一个选项通常是最好的。但是如果您有多个条件,请考虑在选项1中创建一个单独的函数(或属性)进行条件检查。这使得代码更易于阅读,至少在使用好的方法名时是如此
if(MyChecksAreOk()) { Code to execute }
...
private bool MyChecksAreOk()
{
return ConditionOne && ConditionTwo && ConditionThree;
}
如果条件仅依赖于局部范围变量,则可以使新函数成为静态函数,并传入所需的所有内容。如果有混音,就把本地的东西传进来。我更喜欢选项a
bool a, b, c;
if( a && b && c )
{
//This is neat & readable
}
如果您确实有特别长的变量/方法条件,您可以将它们换行
if( VeryLongConditionMethod(a) &&
VeryLongConditionMethod(b) &&
VeryLongConditionMethod(c))
{
//This is still readable
}
如果它们更复杂,那么我会考虑在if语句
之外单独执行条件方法。bool aa = FirstVeryLongConditionMethod(a) && SecondVeryLongConditionMethod(a);
bool bb = FirstVeryLongConditionMethod(b) && SecondVeryLongConditionMethod(b);
bool cc = FirstVeryLongConditionMethod(c) && SecondVeryLongConditionMethod(c);
if( aa && bb && cc)
{
//This is again neat & readable
//although you probably need to sanity check your method names ;)
}
IMHO选择“B”的唯一原因是如果您有单独的else
函数为每个条件运行
e、 g
第一个例子更“易于阅读”
实际上,在我看来,当你必须添加一些“else逻辑”时,你应该只使用第二个,但是对于一个简单的条件,使用第一个味道。如果您担心这种情况会持续很长时间,则始终可以使用下一种语法:
if(ConditionOneThatIsTooLongAndProbablyWillUseAlmostOneLine
&& ConditionTwoThatIsLongAsWell
&& ConditionThreeThatAlsoIsLong) {
//Code to execute
}
祝你好运 第二个是一个经典的例子,所以我要避免它
如果您的条件太长,请将它们提取到方法/属性中。这个问题被问到了,到目前为止,已经得到了回答,好像这个决定应该完全基于“语法”的理由 我想说的是,关于如何在if中设置许多条件的正确答案也应该取决于“语义”。因此,条件应该根据“概念上”事物的组合进行分解和分组 如果两个测试实际上是同一枚硬币的两面,例如,如果(x>0)&&(x),您可以这样做:
如果任何条件失败,它将在块后继续。如果要定义块后要保留的任何变量,则需要在块前定义它们。当条件非常复杂时,我使用以下样式(PHP真实示例): 我相信它比嵌套多个级别的
if()
更好,可读性更好。在某些情况下,像这样的情况下,您无法将复杂的条件分解成碎片,因为否则您将不得不在if(){…}
块中多次重复相同的语句
我还认为,在代码中添加一些“air”总是一个好主意。它大大提高了可读性。if((单个条件表达式a)
&&(单个条件表达式B)
&&(单个条件表达式C)
)
{
蛋白石();
}
其他的
{
opNoneABC();
}
按以下方式格式化if else语句中的多个条件表达式:
a、 首先显示的表达式中的所有二进制逻辑运算{&,| |}
b、 每个二进制操作的两个条件操作数都是明显的,因为它们垂直对齐
c、 嵌套的逻辑表达式操作通过缩进变得显而易见,就像在子句中嵌套语句一样
a、 这避免了常见的静态分析错误
a、 仅使用//
b、 在任何单独测试之前或之后设置断点
c、 例如
//仅使用一个预挂起的“//”禁用任何单个条件测试
//在任何单独测试之前设置断点
//语法“(1&&”和“(0 | |)”通常不会创建任何实际代码
如果(1)
&&(单个条件表达式A)
&&(单个条件表达式B)
&& ( 0
||(单个条件表达式C)
||(单个条件表达式D)
)
)
{
... ;
}
其他的
{
... ;
}
我已经面临这个困境很长一段时间了,但我仍然找不到合适的解决方案。我认为唯一的好办法是先尝试摆脱之前的条件,这样你就不会突然比较其中的5个
如果没有其他选择,那么像其他人建议的那样-将其分解为单独的名称,并缩短名称或将其分组,例如,如果所有名称都必须为真,则使用类似“如果x数组中没有false,则运行”的内容
If all failes@Eoin Campbell给出了非常好的想法。我喜欢它。虽然我不太喜欢这个方法想法,除非这些方法已经存在并返回布尔值。在第二个例子中,你不是在没有理由的情况下评估所有东西吗?我会在条件之前使用“&&”。很难让条件具有相同的字符leng如示例中所示。这看起来很幼稚——在“它做什么?”的意义上;)但一旦你习惯了它,它实际上是可读的。我发现这是最有效的,也更容易在+1之后添加条件。起初我皱起了眉头,但这确实是最好的答案。将布尔
isoktodoother
作为属性非常有意义。但这只是将相同的复杂条件移到了其他地方它还需要可读性,所以我们回到原点。这不仅仅是关于if
语句可读性,而是关于条件可读性。@RobertKoritnik我理解你的意思
{
( VeryLongCondition_1 ) or last;
( VeryLongCondition_2 ) or last;
( VeryLongCondition_3 ) or last;
( VeryLongCondition_4 ) or last;
( VeryLongCondition_5 ) or last;
( VeryLongCondition_6 ) or last;
# Guarded code goes here
}
if( $format_bool &&
(
( isset( $column_info['native_type'] )
&& stripos( $column_info['native_type'], 'bool' ) !== false
)
|| ( isset( $column_info['driver:decl_type'] )
&& stripos( $column_info['driver:decl_type'], 'bool' ) !== false
)
|| ( isset( $column_info['pdo_type'] )
&& $column_info['pdo_type'] == PDO::PARAM_BOOL
)
)
)