我的问题与前一个问题有关,但所提供的解决方案并未解决我在下面概述的问题.谷歌搜索后,我没有找到任何代码样式指南,解决像这样的if语句中的长条件的具体问题.
if( isNull(value1) ||
isToLong(value1) ||
hasBadFormat(valule1)){
doSomething();
}else{
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
要么:
if( isNull(value1) || isToLong(value1) || hasBadFormat(valule1) ){
doSomething();
}else{
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
我对这两种风格的问题是它让我的眼睛难以在真正的块中找到代码并将其与条件分开,或者在长条件后很难确定正确的下一行一行,特别是if语句已经缩进函数或其他if语句中的几个选项卡.
做这样的事情会更好吗?
if( isNull(value1) ||
isToLong(value1) ||
hasBadFormat(valule1)){
doSomething();
}else{
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
或者这种风格会更好地以下列方式之一缩进每个新条件:
if( isNull(value1) ||
isToLong(value1) ||
hasBadFormat(valule1)){
doSomething();
}else{
doSomethingElse();
}
if( isNull(value1)
|| isToLong(value1)
|| hasBadFormat(valule1) ){
doSomething();
}else{
doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
有没有人有一个编码风格指南(可能是公司编码风格政策),以不同于我提出的方式解决这个问题?哪一个更好,你能找到我提到的解决方案的任何缺点或优点吗?
因此我知道,总是在if,for等中包含花括号被认为是一种好的做法,即使它们是可选的,如果只有一个后面的语句,因为它更容易意外地执行以下操作:
if(something == true)
DoSomething();
DoSomethingElse();
Run Code Online (Sandbox Code Playgroud)
如果你没有把括号快速编辑代码.
虽然这样的事情怎么样:
if(something == true)
{ DoSomething(); }
Run Code Online (Sandbox Code Playgroud)
这样你仍然占用更少的线(IMO提高了可读性)但仍然不太可能从上面意外地犯错误?
我问,因为我不相信我以前见过这种风格的if或循环,但我确实看到它用于C#属性中的getter和setter,如:
public string Name
{get;set;}
Run Code Online (Sandbox Code Playgroud)
不要问什么是最好的,因为这太主观了,而只是这是否被认为是可接受的风格,如果不是,为什么不.
这不是一场圣战,这不是"哪个更好"的问题.
如果块,使用以下格式的单个语句有什么优点.
if (x) print "x is true";
if(x)
print "x is true";
Run Code Online (Sandbox Code Playgroud)
相反
if (x) { print "x is true"; }
if(x) {
print "x is true";
}
Run Code Online (Sandbox Code Playgroud)
如果您将单个语句格式化为无括号或者知道程序员是什么,那么是什么导致您/他们首先采用这种风格?我特别感兴趣的是这给你带来了什么好处.
更新:由于最受欢迎的答案忽略了实际问题(即使它提出了最合理的建议),这里是一个无支架专业人员的综述.
为便于阅读,格式化这种方法的最佳方法是什么?
if (strpos($file, '.jpg',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.gif',1) && file_exists("$thumbsdir/$file") == false || strpos($file, '.png',1) && file_exists("$thumbsdir/$file") == false) {
createThumb("$gallerydir/$file", "$thumbsdir/$file",$thumbsize);
fwrite($log,date("Y-m-d")." @ ".date("H:i:s")." CREATED: $thumbsdir/$file\n");
}
Run Code Online (Sandbox Code Playgroud) 对于支持单一决策和没有括号的操作的语言,例如以下示例:
if (var == true)
doSomething();
Run Code Online (Sandbox Code Playgroud)
写这个的首选方式是什么?是否应始终使用括号,还是应将其使用留作个别开发人员的偏好?此外,这种做法是否取决于代码块的大小,例如在以下示例中:
if (var == 1)
doSomething(1);
else if (var > 1 && var < 10)
doSomething(2);
else
{
validate(var);
doSomething(var);
}
Run Code Online (Sandbox Code Playgroud)