代码格式化:处理长调用,操作和布尔逻辑

时间:2012-10-09 01:19:33

标签: java javascript format

我确信之前已经回答了这个问题,但我很好奇格式化长行代码时的最佳做法。

如果格式太长,我们如何格式化

  

请注意,这不是关于下面的正确代码,而是关于我们如何格式化每种类型的run on语句。

假设我们在javascript / jquery

中有一个长条件运算符
var tablesToHide = $('table').length > 1 ? $('table') : $($('.nav > li[class="active"] > a').attr('href'));
tablesToHide.hide();

假设我们在带有空检查的java中有一个长条件

if(person.firstName != null && person.firstName.length() > 32 && person.firstName.length() < 5 && person.lastName != null &&  person.lastName.length() > 32 && person.lastName.length() < 5){//ridiculous operation}

假设我们有一个长时间的操作

long worldVsUnitedStates = (worldDuckCount + worldCatCount + worldTugBoatCount)/(unitedStatesTugBoatCount + unitedStatesDuckCount + unitedStatesCatCount)

像Guava操作一样的长方法调用

final Iterable<AccountingDocument> documentList = Iterables.filter(resultRecord.getAccountingDocuments(), AccountingDocument.class);

记录语句中的大型方法参数

logger.entering("UserAccountingAdministrationController", "createNewUserAccountingDocument", new Object[] { userAccountingForm, result, model });

由于使用FindBugs和throws声明而导致的大型方法参数

public void saveAccountingFormWithValues( @Nullable FooA firstValue, @Nonnull FooB secondValue, @Nullable FooC thirdValue, @Nullable FooD fourthValue) throws DataAccessException 

1 个答案:

答案 0 :(得分:1)

Java Coding Conventions中有一条建议,代码行不应超过80个字符“,因为很多终端并没有很好地处理它们 工具“ ......显然,这不再适用,但这并不意味着我们不应该争取可读性。

即使使用LCD和高分辨率屏幕,并不是每个人都会使用相同的字体大小(我的一个开发人员因为他们的眼睛使用14-16 pt字体),所以你应该追求可读性并使语句容易了解。

尽可能将逻辑元素组合在一起,特别是在if语句和复杂计算......

很多内容将归结为个人陈述(还记得,并非所有标签都相同),但......

我个人会使用像...这样的东西。

if(person.firstName != null && 
   person.firstName.length() > 32 && 
   person.firstName.length() < 5 && 
   person.lastName != null &&  
   person.lastName.length() > 32 && 
   person.lastName.length() < 5) {...}

long worldVsUnitedStates = (worldDuckCount + 
                            worldCatCount +
                            worldTugBoatCount) /
                           (unitedStatesTugBoatCount + 
                            unitedStatesDuckCount + 
                            unitedStatesCatCount)

final Iterable<AccountingDocument> documentList = Iterables.filter(
    resultRecord.getAccountingDocuments(), 
    AccountingDocument.class);

IMHO