行长超过 80char 的最佳实践?

Best practice with lines longer than 80char?

想知道是否有办法将下面的代码行重构为小于 80 个字符?

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 表达式与块内的代码区分开来。

说到如何分解语句,相信很多人的回答都不一样。

尽力使其可读,但是 this 问题详细说明了拆分一行代码的不同方法。所选答案有 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 的实践和工具。其他实践和工具可用;这些是我最熟悉的,找到工作也很好。

"best practice" 的问题往往有点基于意见。

就我个人而言,我会说列限制是一件好事,因为它会阻止行不断地乱七八糟......但是没有明确的理由为什么 80 个字符会是 "correct"限制;例如,Google's Java style guide 指定 100 个字符的限制。

我认为格式化最好留给 objective 工具。围绕格式化的选择在很大程度上是无趣的,只要它们最终生成可读的代码;一个工具可以一致地应用规则,让你自由地做更多有趣的事情。

使用 Google 的格式化工具 google-java-format,您的代码格式如下:

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)) {

我觉得还是比较好

您可能反对必须更改代码以使格式化程序以特定方式执行某些操作;老实说,简单的格式规则和一致应用它们的工具的价值远远超过一对括号的成本(我不记得上次我发现我必须这样做是什么时候 "for real")。