Sam*_*ird 9 java language-agnostic preferences
代码:
public String getTemperatureMessage(double temp)
{
if(temp < 32)
return "Freezing";
else if(temp < 60)
return "Brr";
else if(temp < 80)
return "Comfortable";
else
return "Too hot";
}
Run Code Online (Sandbox Code Playgroud)
关于上面的代码片段,else ifs在技术上是多余的,并且根本不会改变行为.但是,我倾向于把它们放在那里强调条件是排他性的.你的想法是什么?不必要或更清楚?
Bal*_*usC 10
在这种特殊情况下唯一可行的替代方法是获取条件运算符?:.
public String getTemperatureMessage(double temp) {
return temp < 32 ? "Freezing"
: temp < 60 ? "Brr"
: temp < 80 ? "Comfortable"
: "Too hot";
}
Run Code Online (Sandbox Code Playgroud)
留下问题,这对初学者来说是多么可读.
?:
这取决于许多事情,比如你的代码有多复杂.通过这样一个简单的例子,我将返回与ifs放在同一行,而不是使用elses.结构和行为很明确:
public String getTemperatureMessage(double temp)
{
if(temp < 32) return "Freezing";
if(temp < 60) return "Brr";
if(temp < 80) return "Comfortable";
return "Too hot";
}
Run Code Online (Sandbox Code Playgroud)
当我有更复杂的代码时,我发现不使用返回或继续/中断从嵌套中突破,而是分配给状态或结果变量是有用的.然后,我将包括{},即使该块是单个语句,主要是为了保持结构在代码中的表示方式的一致性,还要稍微降低后续编辑将忘记将语句更改为块的风险.
如果这个例子更复杂,我可能会像这样编码:
public String getTemperatureMessage(double temp) {
String result;
if(temp < 32) {
result = "Freezing";
} else {
if(temp < 60) {
result = "Brr";
} else {
if(temp < 80) {
result = "Comfortable";
} else {
result = "Too hot";
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果函数有多个"成功"返回值,我将使用if/else在它们中进行选择.如果一个函数具有正常的返回值,但是一个或多个可能异常退出的方法,我通常不会对正常路径使用"else".例如,我认为说"自然"更为"自然":
int do_something(int arg1)
{
if (arg1 > MAX_ARG1_VALUE)
return ARG1_ERROR;
... main guts of code here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而不是说:
int do_something(int arg1)
{
if (arg1 > MAX_ARG1_VALUE)
return ARG1_ERROR;
else
{
... main guts of code here
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
int do_something(int arg1)
{
if (arg1 <= MAX_ARG1_VALUE)
{
... main guts of code here
return 0;
}
else
return ARG1_ERROR;
Run Code Online (Sandbox Code Playgroud)
如果存在可能"出错"的多种事物,则这种区别变得尤为重要
int do_something(int arg1)
{
if (arg1 > MAX_ARG1_VALUE)
return ARG1_ERROR;
... some code goes here
if (something_went_wrong1)
return SOMETHING1_ERROR;
... more code goes here
if (something_went_wrong2)
return SOMETHING2_ERROR;
... more code goes here
if (something_went_wrong3)
return SOMETHING3_ERROR;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下嵌套的"if/else"语句会变得很难看.这种方法最重要的警告是必须明确给出早期退出的任何清理代码,否则必须使用包装函数来确保清理.
有人会说多重回报就是这里的问题.但这不是我的观点.
对于我的观点,if/else if非常重要,因为即使在你的情况下你返回了一些值,删除elses也意味着你无论如何都不会放它们,这意味着完全不同的东西,如果回报不在这里.
另外,想象有一天有人想要编辑你的代码,并清理它以便一次返回,这个人可能会误解你的代码并犯下这样一个严重的错误:
public String getTemperatureMessage(double temp){
String message;
if(temp < 32)
message = "Freezing";
if(temp < 60)
message = "Brr";
if(temp < 80)
message = "Comfortable";
else
message = "Too hot";
return message;
}
Run Code Online (Sandbox Code Playgroud)
为了澄清我的观点,保留其余部分,保持代码清晰.
| 归档时间: |
|
| 查看次数: |
7467 次 |
| 最近记录: |