dea*_*mon 18 java coding-style
有些人认为多个return语句是错误的编程风格.虽然对于较大的方法也是如此,但我不确定它是否适用于较短的方法.但是还有另一个问题:如果else前面有回复声明,应该明确写出来if吗?
隐含的else:
private String resolveViewName(Viewable viewable) {
if(viewable.isTemplateNameAbsolute())
return viewable.getTemplateName();
return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)
明确else:
private String resolveViewName(Viewable viewable) {
if(viewable.isTemplateNameAbsolute())
return viewable.getTemplateName();
else
return uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,else这里没有必要,但它更明显.
也许是一次回报最简洁的方法:
private String resolveViewName(Viewable viewable) {
String templateName;
if(viewable.isTemplateNameAbsolute())
templateName = viewable.getTemplateName();
else
templateName = uriInfo.getMatchedResources().get(0).getClass().toString();
return templateName;
}
Run Code Online (Sandbox Code Playgroud)
你更喜欢哪一个?其他建议?
Jon*_*eet 22
其他明显的建议:使用条件运算符.
private String resolveViewName(Viewable viewable) {
return viewable.isTemplateNameAbsolute()
? viewable.getTemplateName()
: uriInfo.getMatchedResources().get(0).getClass().toString();
}
Run Code Online (Sandbox Code Playgroud)
对于不可行的情况,我几乎肯定不一致.我不会过分担心它,说实话 - 这种可读性无论如何都会受到严重影响,而且它不太可能引入错误.
(在另一方面,我会建议使用大括号的所有if块,甚至单个语句的.)
"单点退出"教条来自结构化编程的时代.
在当时,结构化编程是一件好事,特别是作为GOTO缠绕的意大利面条代码的替代品,该代码在1960年代和1970年代的复古Fortran和Cobol代码中很流行.但随着Pascal,C等语言的流行以及更丰富的控制结构,结构化编程已被同化为主流编程,并且某些教条方面已经失宠.特别是,大多数开发人员都乐于从循环或方法中有多个出口...只要它使代码更容易理解.
我个人的感觉是,在这种特殊情况下,第二种选择的对称性使其最容易理解,但第一种选择几乎是可读的.最后一个选择让我感到不必要的冗长,而且可读性最低.
但@Jon Skeet指出,你的代码存在更为重要的风格问题; 即'then'和'else'语句周围没有{}块.对我来说代码应该真的写成这样:
private String resolveViewName(Viewable viewable) {
if (viewable.isTemplateNameAbsolute()) {
return viewable.getTemplateName();
} else {
return uriInfo.getMatchedResources().get(0).getClass().toString();
}
}
Run Code Online (Sandbox Code Playgroud)
这不仅仅是代码可爱的问题.总是使用块实际上是一个严重的问题.考虑一下:
String result = "Hello"
if (i < 10)
result = "Goodbye";
if (j > 10)
result = "Hello again";
Run Code Online (Sandbox Code Playgroud)
乍一看,如果i小于10并且j大于10 ,看起来结果将是"你好再次" .事实上,这是一种误读 - 我们被错误的缩进所欺骗.但如果代码是用{ }当时的部分编写的,那么缩进就很明显了; 例如
String result = "Hello"
if (i < 10) {
result = "Goodbye";
}
if (j > 10) {
result = "Hello again";
}
Run Code Online (Sandbox Code Playgroud)
如你所见,第一个}像拇指一样突出,并告诉我们不要相信缩进作为代码意味着什么的视觉提示.
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |