Whats wrong with these beginner style codes?
我是一个初学者,我在读https://stackoverflow.com/questions/237241/what-coding-errors-are-a-telltale-giveaway-of-an-unexperienced-programmer。我什么都没有。
1.为什么写这样的东西会皱眉?
1 2 3 | if (IsAManMan == true) { Console.WriteLine("It's a MAN, man!"); } |
2.这个怎么办?
1 2 3 4 5 6 | if (test) { return true; } else { return false; } |
我不写上面这样的代码。应该这样写吗:
在本例中:
1 2 3 | if (IsAManMan == true) { Console.WriteLine("It's a MAN, man!"); } |
在大多数语言中,
1 2 3 | if (IsAManMan) { Console.WriteLine("It's a MAN, man!"); } |
在这个例子中:
1 2 3 4 5 6 | if (test) { return true; } else { return false; } |
在上面的例子中,这意味着
1 2 3 4 5 6 | if (true) { return true; } else { // If it's not true, it's false return false; } |
这又是不必要的冗长代码,所以我们只是
1 | return test; |
相反。
最后,这仍然是一个偏好和可读性的问题。例如,如果您认为
这只是一个重言式。如果下雨,而且确实下雨,那么你可以(或者应该)去掉多余的比较、检查和返回。
在这两种情况下,您都在测试布尔变量的值。因为您的值已经是一个布尔值,所以不需要对
例如
1 2 3 | if(isAManMan == true){ //... } |
可以计算为
1 2 3 | if(true == true){ //answer: true //... } |
或
1 2 3 | if(false == true){ //answer: false //... } |
这和刚才写的一样
1 2 3 | if(isAManMan){ //... } |
在第二个示例中,在决定返回哪个布尔值之前,您要检查另一个布尔值的值。
再一次,
1 2 3 4 5 | if (test) { return true; }else { return false; } |
可以计算为
1 2 3 4 5 | if (true == true) { //returns true return true; }else { return false; } |
或
1 2 3 4 5 | if (false == true) { //returns false return true; }else { return false; } |
if语句是多余的,因为变量已经保存了您想要返回的值,因此这是等效的,并且首选:
1 | return test; |
但是需要注意的是,您的示例是完全有效的,但是一个好的编译器会将它们优化为我给出的改进版本,因此最终归结为可读性和约定。我相信我给出的版本更具可读性,更接近普遍接受的惯例。
假设您想要返回一个布尔值,而不是第二种情况下测试的实际值。
你可以做到
1 | return !!test |
在大多数语言中,或类似的
1 | return bool(test) |
更清晰易读。
由于这被标记为语言不可知论:
有些语言的关键字可以用于变量名。在Fortran中,这是一个有效的语句:if-then-else。
如果将
python 2.0中的真实世界示例
1 2 3 | >>>True = False >>>True False |
舌头在脸颊上。
这些代码做同样的事情。在我看来,它只是可读性。