在C#中,在使用IF之前声明条件是可读的还是无效的
本文关键字:条件 无效 声明 IF | 更新日期: 2023-09-27 18:21:26
编写代码时,使用if-by-following方式
int something = 5;
bool possible = false;
if( something>0 && !possible){
doSomething();
}
和
int something = 5;
bool possible = false;
bool condition1 = something > 0;
bool condition2 = !possible;
if( condition1 && condition2){
doSomething();
}
哪个更可读?哪个更有效?
我认为当情况像时,第二个更好
if( Something > (SomeOtherThing + SomeSomeThing) && !Something.Something.Possible)
我知道这与c#没有直接关系,但我想知道,尤其是在c#中!
没有硬性规则,但如果提取到会说话的变量名或方法调用,代码通常会更可读。在以下示例中,条件是绝对清楚的。
bool UserIsAdmin() { ... }
bool UserOwnsItem() { ... }
bool UserMayAccessItem {
return UserIsAdmin() || UserOwnsItem();
}
// ..
if (UserMayAccessItem()) {
// do something here
}
另一方面,在某些简单的情况下,添加变量并不能提高可读性。
这基本上是一个风格和偏好的问题。请记住,代码应该易于阅读,并且不言自明。
第一个选项更可取,这不仅是因为快捷方式评估,而且也是为了维护。
例如,我向您保证,您或其他人最终会更改条件,而无需调整变量名。
无效。
当condition1为false时,在您的示例中不需要计算condition2。有时这种计算会消耗资源(例如,对DB的请求)。在这种情况下,第二个选项无效。然而,它是可读的,特别是当您以更方便的方式命名条件变量时,例如:
bool somethingIsPositive = somithing > 0;
bool itIsImpossible = !possible;
if(somethingIsPositive && itIsImpossible)
...
此外,您还可以利用Lazy类(如果您使用C#)不总是请求condition2(即使condition1为false),因此这实际上更可读,并且没有性能问题(当condition2需要时间计算时,而不是在您的情况下:):
int something = GetNumber();
bool possible = GetPossibility();
var somethingIsPositive = new Lazy<bool>(() => something > 0);
var itIsImpossible = new Lazy<bool>(() => !possible);
if( somethingIsPositive.Value && itIsImpossible.Value){
doSomething();
}