混淆If Statement?

我总是使用If语句(在C#中)作为(1. Alternative);

if (IsSuccessed == true) { // } 

我知道没有必要写“== true”作为(2. Alternative));

 if (IsSuccessed) { // } 

但是,我使用它是因为它更具可读性并且不会导致性能问题。 当然,这是我的选择,我知道许多软件开发人员更喜欢第一种选择。 什么是最佳用法,为什么?

如果布尔值的名称使它完全清楚它是什么,那么我总是选择版本2.但是,有时候你会遇到一个特别钝的变量名,你不能改变它,至少可以’现在改变…重构一切都很好,但我也尝试避免在对代码进行function更改时进行过多的重构。

例如:

 if (!NoDropDownInHeader == true) { // Activates when there *is* a dropdown in the header) } 

我实际上在生产代码中看到了这个特殊的例子并简化为:

 if (NoDropDownInHeader == false) { // Activates when there *is* a dropdown in the header } 

而且我个人认为这两个例子都更具可读性(虽然可以说第一个例子可能与这个例子相比,对于心理解析的难度而言)比:

 if (!NoDropDownInHeader) { // Activates when there *is* a dropdown in the header } 

注意: 是的,我知道这个变量的命名很糟糕,但是在它所存在的众多地方进行更改时,由于会影响的地方数量而超出了我所做的更改范围

我不喜欢第一种选择。 它不仅是多余的,而且一个简单的拼写错误会引入一个错误。

考虑一下

 bool b = false; if (b = true) { Console.WriteLine("true"); } 

显然,代码将输出“true”,但这可能不是程序员的意图。

幸运的是,像Resharper这样的工具会对此发出警告,但它会使用默认设置(*)进行编译。

直接使用bool将完全消除问题。

(*)公平地说,VS也会对此发出警告,如果你将警告作为错误打开,它甚至都不会编译。

我个人会选择第二种选择。 它更自然地读取并表明程序员实际上意识到内置的bool类型,这是一流的公民。

完全依赖于风格。 认真。 随心所欲地为你自己的东西做任何事情,无论你工作的是什么样的风格。

我声称喜欢第一种选择的人粗略地掌握了布尔逻辑。 他们可能在理智上“理解”它,但他们肯定不会理解它; 他们没有内化这种思维方式。

毕竟,是否有人都使用以下成语? “如果明天下雨是假的,我们可能会去游泳” – ,当然不是。 没有人说这样的话,这太荒谬了。 什么论证支持这种说法,即当应用于编程(而不是自然)语言时,这个成语突然变得清晰?

我更喜欢第二种选择。 我认为它更具可读性,但如果你需要使用Boolean? ,那么第一种选择具有保持相同的优势Boolean? 由于某些原因。

我曾经写过“== true”,因为我认为它更清晰,更明确,但决定改变。 现在它总是显得更清晰,你只会习惯它。

我会满足你的第二个选择。 在我看来,没有必要写

 if (IsSuccessed == true) { // } 

事实上,我完全不喜欢使用== true作为布尔值,因为它没有额外的值。 AND:你必须键入较少的字符,这显然是一个优点:p。 老实说,我也会将布尔值重写为bSuccessed,因为它是一个布尔值。

这两个表达式在C#中是等效的,但要注意,与其他语言不同。

例如,在C ++中,第一个选项接受值为true的布尔值。 IsSuccessed上的任何其他值都将使条件无效。

第二个选项接受“truthy”的任何值:像1这样的值或任何非零值也被认为对if有效。

所以这些条件将validation:

 // Truthy validation (second option) if(1) {...} //validates if(2) {...} //validates 

而其他人则不会:

 // Equals to true validation (first option) if(1==true) {...} // does not validate if(2==true) {...} // does not validate 

同样,这不适用于C#,因为它只接受ifs上的布尔值。 但请记住,其他语言接受的不仅仅是布尔。

更多的输入意味着更多的机会出现错误。 选项2一路……

当我开始编程时,我使用第一个,但有点习惯第二个选项。 它还节省了额外字母的时间类型。

我最看到的是:(我做什么)

 if (IsSuccessed) { // } 

作为C ++的替代品,C#不需要它(参见注释):

 if (true == IsSuccessed) { // } 

另一种方法是防止自己错误地分配而不是比较。 (= vs ==)

我会去第二个。 至少对我来说这更容易。 在第一种选择中,我总是想知道为什么要进行比较。 检查左侧的类型只是为了确保酸没有开发人员超载了==运算符,在他的类和bool选项之间进行比较。
第一个也导致错误,第二个不会。
if(a)可能需要更改为if(a||b)if(a&&b)在第一个版本中它可能最终结果if(a == true || b)if(a == true && b)前者b是多余的,后者等于if(a==b)