Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 混淆If语句?_C#_Java_If Statement - Fatal编程技术网

C# 混淆If语句?

C# 混淆If语句?,c#,java,if-statement,C#,Java,If Statement,我总是使用If语句(在C#中)作为(1.可选) 我知道没有必要将“==true”写为(2.备选方案) 但是,我之所以使用它,是因为它更具可读性,并且不会导致性能问题。当然,这是我的选择,我知道许多软件开发人员更喜欢第一种选择。最好的用法是什么?为什么?我个人会选择第二种。它读起来更自然,表明程序员实际上知道一个内置的bool类型,这是一级公民。我更喜欢第二种选择。我认为它更具可读性,但如果出于某种原因需要使用Boolean?,第一种选择的优点是保持不变。完全依赖于样式。认真地无论你喜欢什么样的东

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

我知道没有必要将“==true”写为(2.备选方案)


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

我个人会选择第二种。它读起来更自然,表明程序员实际上知道一个内置的
bool
类型,这是一级公民。

我更喜欢第二种选择。我认为它更具可读性,但如果出于某种原因需要使用
Boolean?
,第一种选择的优点是保持不变。

完全依赖于样式。认真地无论你喜欢什么样的东西,无论你的作品是什么样的风格。

我也会接受你的第二个选择。我认为没有必要写这封信

if (IsSuccessed == true) 
{ 
   // 
} 
事实上,我完全不喜欢对布尔值使用==true,因为它没有额外的值。 而且:你必须输入更少的字符,这显然是一个优势:p。
老实说,我也会将布尔值重写为bsuccess,因为它是一个布尔值

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

我以前写“==true”,因为我认为它更清晰、更明确,但我决定改变。如果布尔值的名称清楚地表明它是什么,那么我总是选择版本2。然而,有时你会被一个特别迟钝的变量名所困扰,你不能改变,至少现在不能改变。。。重构很好,但在对代码进行功能更改时,我也尽量避免重构过多

例如:

if (!NoDropDownInHeader == true)
{
  // Activates when there *is* a dropdown in the header)
}
实际上,我在生产代码中看到了这个特定示例,并将其简化为:

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

和我个人认为这两个例子都是可读的(尽管第一个例子可能与心理分析困难相一致)比


注意:是的,我知道变量的名称很糟糕,但是在变量出现的众多位置对其进行更改超出了我所做更改的范围,因为位置的数量会对其产生影响。

我将选择第二个。至少对我来说比较容易。在第一种选择中,我总是想知道为什么要进行比较。检查左侧的类型,以确保acid上没有开发人员重载==运算符,将其类与bool进行比较作为一个选项。
第一个也会导致错误,第二个不会。
if(a)
可能需要更改为
if(a | | b)
if(a&&b)
在第一个版本中,它可能会变成
if(a==true | | b)
if(a==true&&b)
在前者中
b
是多余的,后者等于
if(a==b)
我看到的最多的是:(我所做的)

作为C++中的替代,对于C语言,它不需要(见注释):


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

我不喜欢第一个选项。它不仅是多余的,而且一个简单的打字错误会引入一个bug

想想这个

bool b = false;

if (b = true) {
   Console.WriteLine("true");
}
显然,代码将输出“true”,但这可能不是程序员的意图

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

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


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

这两个表达式在C#中是等价的,但要注意,它们在其他语言中是不等价的

例如,C++中,第一个选项只接受一个值为真的布尔值。

issaccessed
上的任何其他值都将使条件无效

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

因此,这些条件将验证:

// 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一路…

就我个人而言,我会选择将
issaccessed
重命名为
successed
issaccess
,但那是另一回事。在我看来,第一个alt是在新手编写的代码中看到的,而有经验的程序员会使用第二个alt。这只是我的观察。在使用第二个窗体一会儿之后,你会认为它更可读。此外,如前所述,第一种形式看起来很业余。你要坚持大众化,大多数程序员都使用表单#2。我同意@Zaki的观点,这有点新意。我认为如果你像“如果成功了”那样阅读,比“如果成功了”更容易阅读。对我来说似乎更自然。啊哈,那么程序员必须编写自然语言吗?:)为变量使用前缀是明智的。这样,无需搜索代码,就可以快速查看变量的类型。我知道,在像VS这样的环境中,你可以鼠标悬停,但这很正常
if (IsSuccessed)
{
   //
}
if (true == IsSuccessed)
{
   //
}
bool b = false;

if (b = true) {
   Console.WriteLine("true");
}
// 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