你做了以下哪一项:
var = true;
if (...) var = false;
或者
if (...) var = false;
else var = true;
你有理由选择还是其他?
我的工作前提是var没有发生任何其他事情。下一行代码可能是:
if (var) { ... }
答案 0 :(得分:9)
直接怎么样var = {...}因为它是布尔值?
答案 1 :(得分:5)
我更喜欢Java中的第二个,做这样的事情:
int x;
if (cond) {
x = 1;
} else {
x = 5;
}
因为如果稍后更改了某些内容(例如,我将else
块转换为else if
),编译器将告诉我该变量未能初始化,如果我未能初始化,我可能会错过我用了你的第一个策略。
答案 2 :(得分:3)
如果您的语言支持,您也可以使用三元运算符:)
如果IF有可能失败,我通常只会做第一个,如果有的话,变量必须有默认值。
答案 3 :(得分:2)
如果设置了默认值,那么稍后再将其重置为其他内容,虽然这是一个非常小的数量,但它仍然是浪费资源。所以,大多数情况下,对于大多数代码来说,平衡的if / else甚至是(?:)语法都更清晰,更合适,除了:
有时,如果你正在做的是构建直通代码(或决策函数),你从一个特定的条件开始,然后测试一大堆其他条件,看看是否有变化,那么你想要肯定首先设置默认值:
int final = 27;
if ( some condition ) final = 86;
if ( another condition ) {
final = 98;
return final;
}
if ( some state ) {
final += 2;
}
return final;
或类似的东西。
顺便说一下:在你的例子中,如果设置'var',那么下一行只是测试'var',你真的不需要'var'吗?如果条件如此丑陋以至于使用'var'有助于使其可读,那么最好将条件移动到它自己的函数中,接受额外的函数调用来帮助提高可读性。一般而言,当且仅当您获得重要内容(例如可读性)时,您才会浪费资源。保罗。
答案 4 :(得分:1)
取决于具体情况。当IF明显失败时,'var'需要为真,我会使用第二个选项。
答案 5 :(得分:1)
我使用第一种类型,除非要设置的值需要大量计算。
答案 6 :(得分:1)
总是第一个人说的第一个。然而,值得强调的原因是,这是因为它使程序更能抵御因不正确的维护而导致的未来错误。
例如,出现一些额外的业务条件并且维护编码人员在if中添加一些额外条件或者包含更多业务逻辑并错误地修改代码时,这是很常见的 - 例如
if (a==b) { if (a==c) { [new logic] var=false } } else { var = false }
从表面上看,它看起来不太可能,但它经常发生惊人的事情(公平地说,经常出现这种情况后,原来如果情况复杂得多)。首先进行初始化可以防止这种情况发生。
答案 7 :(得分:0)
您更喜欢简短紧凑的代码,还是更容易阅读的代码?
如果您更喜欢使用简短紧凑的代码
var x = true;
if (...) x = false;
但这甚至可以“改善”。大多数语言都给出初始值,通常对于布尔类型,默认值为false。所以,你可以写
var x;
if (...) x = true;
如果您更喜欢易于阅读的代码
if (...) var x = false;
else var x = true;
因为它使你的意图清晰。
两者的表现相同。
答案 8 :(得分:0)
取决于语言。在C ++中,我强烈建议尽快将其设置为默认值,否则可能会产生垃圾结果。
在大多数其他语言中,您可以更灵活一些。事实上,我认为明确定义条件比设置默认值更具可读性。
答案 9 :(得分:0)
由于变量未写入以后,对于一般值,我将在Java中编写以下内容:
final Type var;
if (cond)
{
var = value1;
}
else
{
var = value2;
}
Java编译器将捕获var在使用之前未赋值的错误。 final关键字表示变量在条件之后是常量的事实。
在您使用布尔值的确切情况下,我会使用
final boolean var = !cond;
在这种情况下使用条件表示您受到“booleanophobia”的折磨。
在C中,我会在声明中初始化变量。
答案 10 :(得分:0)
我通常设置“默认”值并使用if语句来修改它。 如果不存在默认值,那么只有if语句。
int timeout = 100;
if (moreTime) timeout = 1000;
int searchOption = null;
if (sometest1) searchOption = 1;
if (sometest2) searchOption = 2;
// then later..
if (searchOption != null)
.....
答案 11 :(得分:0)
如果初始化很复杂,直接表达式不能干净利落,我有时觉得处理这种情况很有用
boolean isFoo = determineWhetherFoo(...);
其中determineWhetherFoo
采用任何必要的参数来进行确定并返回适当的布尔结果。这使得变量意味着什么以及它依赖什么非常清楚。将变量初始化为可能错误的值,然后是一堆可能改变其值的代码,有时会模糊表达的内容。
答案 12 :(得分:0)
无论你在哪里写if()也写下else - 即使它是空的 编译器会优化它,但它会强迫你(以及你之后的任何程序员)思考if()未被触发的时间,后果是什么?