如何以及在哪里打破长行代码?

时间:2010-06-29 04:05:25

标签: long-lines

  

可能重复:
  Where to wrap a line of code, especially long argument lists?
  Coding standards and line length

您好,

  • 你在哪里打破长行代码? (例如:在经营者之前或之后)
  • 如果是长字符串,你是否将字符串拆分为子字符串?
  • 打破长线时还有哪些其他情况?

6 个答案:

答案 0 :(得分:5)

从历史的角度来看,由于屏幕尺寸,这曾经是旧的80列宽度。 但是,由于这种情况通常并非如此,我认为严格遵守这一点并不重要。

但是,如果你考虑一下,你真的不想在屏幕上滚动来实际读取整个代码。打破它绝对是一个好主意,所以如果从宽屏幕到笔记本电脑,坚持使用80列确实更容易阅读。

这是我分手的方式:

1)经营者

if(longVariableName || someOtherVariable ||  
   nextVariable)  
{
   //Some code here.
}

当您阅读代码时,在操作符之后将其分解,意味着最后一次操作(在我的示例中为||),当您开始阅读下一个操作符时,它就在您的脑海中。使阅读,理解和理解更容易。

答案 1 :(得分:3)

几个选项:

  1. 为同行设定标准。
  2. 打印宽度。
  3. 屏幕宽度。
  4. -Cheers。

答案 2 :(得分:3)

这是个人偏好,因为这个问题是主观的,但我倾向于遵循这些指导原则。

  • 在可能的情况下将代码限制为79个字符(这样就可以很好地打印出足够高的字体大小,以便让我老化的眼睛阅读它)。通常我会在60范围内的某个地方打破它们,以便不可避免地编辑线条以解决问题并不意味着我必须重新格式化: - )

  • 尽可能将行划分为层次结构中的高位。我的意思是x = 1 * 2 + 3 * (4 + 5);会在第一个+被打破而不是其他任何地方。这是因为语句的最高级别“元素”是x1 * 23 * (4 + 5)

  • 智能地使用缩进以确保将以下行视为第一行的一部分。例如,如果三行语句的第一行以3个制表符开头,则以下两行有4个制表符。

类似的东西:

x = 1 * 2 +
    3 * (4 + 5);

或:

if (1 * 2 =
    3 * (4 + 5))
{
    doSomething();
}

最后一次通常是我唯一一次将开口支架放在一条单独的线上。通常我会:

if (1 * 2 = 3 * (4 + 5)) {
    doSomething();
}

但拆分它会使if的第二行看起来像块的一部分:

if (1 * 2 =
    3 * (4 + 5)) {
    doSomething();
}

我不喜欢。

至于字符串,它们比我的首选宽度长,我倾向于将它们分解。由于编译器将"abc" "def""abcdef"完全相同,因此C及其兄弟们可以轻松实现这一点。即使 运行时影响(如串联字符串),我也会将它们分解,但我仍然会尽量减少这种影响。

答案 3 :(得分:2)

如果声明足够长以保证中断,我将尝试在每个“语义块”的一行中将其分解,确保没有单独的行可能被误认为是单独的语句(例如,从操作符开始(即使它是一个操作符)点)而不是用运算符结束一行。如果显而易见,我还会缩进以表示任何逻辑层次结构。

当我说语义块时,我倾向于发现长语句通常有某种模式,允许你将它分成几个进程。它们可能是他们自己的线条,但有时候它们很容易断线,特别是当你使用链接对象时。

答案 4 :(得分:2)

这取决于您选择的环境:您的语言,标准IDE,您的同事,以及本身看起来非常容易理解的内容。

您没有提及您选择遵循的任何一项。如果您不得不期望在终端窗口中编辑此代码,您可以从经典备用数据库开始:80个字符 - 超过这个数字,一些终端和CLI编辑器会破坏或包装。出于这个原因,许多IDE将在第80列标记处提供视觉提示。如果您可以合理地期望每个查看代码的人都将使用功能齐全的IDE(例如:XCode,Eclipse和MS Visual Studio),那么这对您来说就不那么重要了。

根据我的经验,所有地方都喜欢避免过长的行,即使我们都使用可以自动换行的IDE。根据我的经验,行包装被认为是错误的,并且在所有情况下都被禁用。

从语义上下文中我试图打破子句点。基本上如果线路将在120个字符内结束,如果没有方便的位置,我不太可能将其分解。如果它超过80个字符,并且有可识别的条款,我将它们分解。

这里使用的'子句'是一个可以完全括号括起来的表达式。数学多部分表达式在运算符处被分解,运算符是后续行中的第一个表达式。当谈论一个长逻辑块时,如在if语句或while / for循环中,同样的事情适用,我打破statemnt,后面的行缩进,操作符优先。

如果您正在使用Objective-C XCode处理OSX,那将帮助您解决问题。它会自动缩进后续行,使':'均匀对齐。这提供了一种可能易于阅读的方法调用。

有效地,你应该为自己尝试更长的线路长度,并决定在哪些方面难以理解。通过书面文本(评论或小说,两者),我发现过宽的列感觉像是runon句子,并且很容易失去我的位置。当代码中的行超过100个字符时,通常意味着有许多子句,如果必须向右/向左滚动进行读取,则很容易丢失代码尝试执行的操作。最后,当你在一行中有大约100个字符时,你可以有两个并排打开的代码窗口用于比较/对比/上下文信息...等等。长行使这不切实际。

许多程序员都会同意,您熟悉的编码风格整洁干净,您可以经常检测出复杂或难以理解的线条或区域。这是一个近乎潜意识的线索,让你注意到一条线或方法需要一些重构或一些爱。伸出的钉子是第一个拿到锤子的钉子(如果我正确地应用了民间法则)。过长的线条是需要简化或评论某些内容的线索。

答案 5 :(得分:1)

因为现代IDE支持水平滚动,所以我并不关心一条线本身有多长(除非我的团队这样做);只有多么简单才能理解。但它很少重要,因为我将其分解为线条或方法以使它们更容易理解,因此每行的长度自动保持不变。