0

我确信这已经被回答过,但我很好奇格式化长代码行时的最佳实践。

如果它们运行时间过长,我们如何格式化它们

请注意,这不是关于下面的正确代码,而是关于我们如何格式化每种类型的 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 
4

1 回答 1

1

Java 编码约定中有一项建议,即代码行不应超过 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);

恕我直言

于 2012-10-09T01:37:10.323 回答