想知道是否有办法将下面这行代码重构到80char以下?
if(swat[i]==0 && 0 <= mouseX-fX[i] && mouseX-fX[i] <= flysize && 0 <= mouseY-fY[i] && mouseY-fY[i] <= flysize){
还是像这样写成多行是最好的做法。
if(swat[i]==0
&& 0 <= mouseX-fX[i] && mouseX-fX[i] <= flysize
&& 0 <= mouseY-fY[i] && mouseY-fY[i] <= flysize){
更喜欢第二种方案。如果你需要在多个地方检查这个条件,我甚至会去用专门的方法。
说到如何拆分语句,相信很多人都会有不同的回答。
不过,尽量让人看懂吧 这个 问题详细介绍了拆分一行代码的不同方法。选择的答案有Oracle的建议。
另外只要你在代码的其他地方不重复这个相同的条件语句,我认为像这样把结果存储在一个变量中更易读。
boolean condition = swat[i]==0 && 0 <= mouseX-fX[i]
&& mouseX-fX[i] <= flysize && 0 <= mouseY-fY[i]
&& mouseY-fY[i] <= flysize;
if (condition) {
//code here...
}
上面的例子遵循了Oracle的建议 在操作符之前插入一个换行符。
我在这里是以Google的实践和工具来回答的。其他的实践和工具也是可以使用的,这些是我最熟悉的,并且发现也很好用的。
关于 "最佳实践 "的问题,往往是有些见仁见智的。
就我个人而言,我会说列数限制是件好事,因为它能让行文不再是漫无边际的......。但没有明确的理由说明为什么80个字符是 "正确 "的限制;例如: 谷歌的Java风格指南 指定了100个字符的限制。
我认为,格式化是最好留给客观工具的东西。围绕着格式化的选择在很大程度上是无趣的,只要它们最终产生的是可读的代码;一个工具可以始终如一地应用规则,让你可以自由地做更有趣的事情。
使用Google的格式化工具。google-java-格式你的代码格式是这样的。
if (swat[i] == 0
&& 0 <= mouseX - fX[i]
&& mouseX - fX[i] <= flysize
&& 0 <= mouseY - fY[i]
&& mouseY - fY[i] <= flysize) {
我觉得这比第一种方式要好。但是,我认识到,第二个和第三个条件是相关的,第四个和第五个条件也是相关的。你可以用括号来实现这种分组。
if (swat[i] == 0
&& (0 <= mouseX - fX[i] && mouseX - fX[i] <= flysize)
&& (0 <= mouseY - fY[i] && mouseY - fY[i] <= flysize)) {
我认为这样更好
你可能会抨击为了让格式化器以某种特定的方式做某事而不得不改变代码;老实说,简单的格式化规则和持续应用这些规则的工具的价值远远超过了几对小括号的代价(我不记得上一次发现我必须 "真正 "这样做是什么时候了)。
我会这样摆放。
if (swat[i] == 0 && 0 <= mouseX-fX[i] && mouseX-fX[i] <= flysize
&& 0 <= mouseY-fY[i] && mouseY-fY[i] <= flysize) {
// code here
}
额外的空间用于缩进有助于保持 if
与代码块内的代码不同的表达式。