我是初学者,我正在阅读https://stackoverflow.com/questions/237241/what-coding-mistakes-are-a-telltale-giveaway-of-an-inexperienced-programmer。我没有得到一些东西。
1.为什么写这样的东西是不受欢迎的?
if (IsAManMan == true) {
Console.WriteLine("It's a MAN, man!");
}
2.这个怎么样?
if (test) {
return true;
}
else {
return false;
}
我不会像上面那样编写代码。应该这样写:return test
?或者为了便于阅读,我有时会将其写为return test?true:false
或return (test==true)? true:false
答案 0 :(得分:12)
在这个例子中:
if (IsAManMan == true) {
Console.WriteLine("It's a MAN, man!");
}
在大多数语言中,if
条件总是评估布尔表达式,这意味着IsAManMan
只能是true或false。因此,比较真或假是不必要的,因为它是暗示。所以我们只写这个:
if (IsAManMan) {
Console.WriteLine("It's a MAN, man!");
}
在这个例子中:
if (test) {
return true;
}
else {
return false;
}
按照上面的例子,这意味着test
只能是真或假,这就像说:
if (true) {
return true;
}
else { // If it's not true, it's false
return false;
}
这又是不必要的详细代码,所以我们只是
return test;
代替。
最后,它仍然是偏好和可读性的问题。例如,如果您认为if (IsAManMan == true)
比if (IsAManMan)
更容易解释,您仍然可以这样编写,编译器也不介意。
答案 1 :(得分:8)
这只是一个重言式。 如果下雨和如果确实下雨完全相同,那么,您可以(或应该)省略多余的比较,检查和退货。
答案 2 :(得分:2)
在这两种情况下,您都在测试布尔变量的值。因为你的值已经是布尔值,所以不需要对true
进行显式测试,因为它隐含在if语句中(以及包含布尔测试的类似结构,如循环)
例如
if(isAManMan == true){
//...
}
可以评估为
if(true == true){ //answer: true
//...
}
或
if(false == true){ //answer: false
//...
}
与编写
相同if(isAManMan){
//...
}
在你的第二个例子中,在决定返回什么样的布尔值之前,你正在检查另一个布尔值的值。
再次
if (test) {
return true;
}else {
return false;
}
可以评估为
if (true == true) { //returns true
return true;
}else {
return false;
}
或
if (false == true) { //returns false
return true;
}else {
return false;
}
if语句是多余的,因为变量已经保存了你想要返回的值,因此这是等价的,并且是首选的:
return test;
重要的是要注意,您的示例完全有效,但是一个好的编译器会将它们优化为我给出的改进版本,因此最终归结为可读性和约定。我相信我提供的版本更具可读性,更接近普遍接受的惯例。
答案 3 :(得分:0)
这些代码做同样的事情。在我看来,它只是可读性。
答案 4 :(得分:0)
由于这被标记为与语言无关:
有些语言可以将关键字用于变量名称。在FORTRAN中,这是一个有效的陈述:如果那么那么。
如果将true
定义为值为false
的布尔变量,则建议的速记解决方案与更冗长的解决方案不同。如果test,IsAMan,true和false首先不是布尔值。
Python 2.0中的真实示例
>>>True = False
>>>True
False
舌头在脸上。
答案 5 :(得分:0)
假设你想要返回一个布尔值,而不是第二种情况的test的实际值。
你可以做到
return !!test
在大多数语言中,或类似
return bool(test)
更明确,更易读。