这些初学者风格代码有什么问题?

时间:2010-07-18 10:45:46

标签: language-agnostic

我是初学者,我正在阅读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:falsereturn (test==true)? true:false

6 个答案:

答案 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)

更明确,更易读。