你如何编写易于被其他人阅读的代码以及没有编写任何部分代码的代码?
答案 0 :(得分:9)
确保其他人可以阅读您的代码的最佳方法是确保其清晰简洁。即,
除此之外,你开始进入可能有点主观的领域,大多数人应该就这些项目达成一致。
答案 1 :(得分:6)
此问题是主观的,应根据FAQ
在StackOverflow上避免使用我不应该提出什么样的问题 问这里?
避免提出问题 主观,议论或要求 扩展讨论。这是一个地方 对于可以回答的问题!
避免过度评论:
// add one to the count:
i++;
使用好的变量和方法名称:
int x = i + j;
int runSum = prevSum += newValue;
在可用的地方使用编码速记:
if (x == y)
{
z = a;
}
else
{
z = b;
}
z = (x == y) ? a : b;
答案 2 :(得分:6)
你可能想看看Robert C. Martin的Clean Code。它提供了许多有用的实践来确保您的代码可读。
此外,如果您的代码受到许多彻底测试代码的单元测试的支持,它为用户提供了一种通过查看测试正在进行的操作来理解代码的方法。您还会发现,如果您遵循测试驱动开发过程,并且您为每个功能部分编写测试,那么您的功能往往很小,只做一件事并做得很好,而且往往更像是一个故事,而不仅仅是一个故事。一个庞大的复杂网络“东西”。
测试往往比评论更新。我经常忽略评论,因为它们很快就会过时。
答案 3 :(得分:4)
保持代码美观,清晰和简单。当它显而易见时,不要评论你正在做什么(例如我知道什么是foreach或者是什么,我通常不需要解释)。
使简单事物占用更少行的代码技巧(例如自动属性)也很好。
答案 4 :(得分:4)
购买&阅读Code Complete 2。有很多关于编写易于阅读/维护代码的东西。
答案 5 :(得分:2)
我不认为这是一个主观问题,但它太宽泛了!这不仅仅是评论和给出好的变量名称。它涉及人类如何理解代码。因此,您的系统必须以一种方式实现,读者可以通过两种方式轻松构建其设计的心理模型:
自上而下:假设用户知道系统域,他倾向于假设它将如何实现,因此他将扫描系统包和类,寻找他能识别的实体。为你的课程提供良好的名称并正确地模块化它将非常有用。
自下而上:一旦用户到达部分代码,他就会从那里开始导航,构建知识块。如果您的系统具有较低的内聚力和大量隐式依赖关系,则用户将会丢失。
Kent Beck采用三个原则:沟通,简单和灵活。当然,有时候你必须简单地换取灵活性,反之亦然。
这可以继续下去。这个问题的答案适合一本大书。正如@rmbarnes建议的那样,购买并阅读Code Complete 2.我还建议Kent Beck Implementation Patterns - 它与您的问题高度相关。
答案 6 :(得分:1)
答案 7 :(得分:1)
由于其他人在我读这个问题时几乎都在说我正在思考的内容,所以我只会分享两本与你可能有兴趣阅读的这个主题有关的书。这些书使用开源代码示例来解释如何读写高质量的代码。除了Code Complete之外,我认为当你想用任何语言编写好的代码时,它们都是宝贵的资源。
答案 8 :(得分:1)
我的规则:
答案 9 :(得分:0)
可能最重要的一点是保持语法一致。我还要看一下你所写语言的设计指南。
答案 10 :(得分:0)
作为一名拥有多年经验的开发人员,这曾经是一个真正的问题。我甚至不能说我经过多少小时思考这个问题并在我的代码中尝试不同的东西。上面的答案也非常好。我只想添加一两件事。
我们每个人都有不同的东西,使我们的阅读与其他阅读不同。你觉得容易阅读的东西可能真的很难让其他人阅读。
代码的清洁度是一个非常重要的方面。很快就会忘记它。
最重要的是:你是自己的老师。无论您遵循何种风格,您都希望根据自己的经验改变一两件事。几个月过去了,你必须回到原来的修补程序或文档,你会得到“我不敢相信我编写的代码就像那样”。记下代码可读性的问题,并确保不要再写这样的内容。
答案 11 :(得分:0)
我很可能是少数人,但我不介意空白。我喜欢WHITESPACE。由于编译器将其取出并且HD空间非常便宜,我喜欢在我的代码中使用空格。
例如我喜欢:
int total = 10;
int sum = 0;
for (int i = 0; i < total; i++)
{
sum += i;
}
// Next coding statement is a space below the bracket
return sum;
我不喜欢:
int total = 10;int sum = 0;
for (int i = 0; i < total; i++)
{
sum += i;
}
return sum;
即使技术上不需要,我也会在Brackets中加入。最好的例子是if语句。我发现这有助于提高可读性。
if(true)
// some action
if(true)
{
// Some action
}
对我来说最好的代码是尽可能简单的代码。评论尽可能少,最重要的是 。
答案 12 :(得分:0)
这里有很多好的答案,我想从喜欢大局的工程师的角度添加一些东西。我经常发现,在类图或包级别概述(图表/注释等)方面获得高级概述,如果在文件中没有任何10行标题注释来帮助我很多,那就哎呀。我们可以使用Doxygen / Javadocs来生成它们,或者花10到15分钟来记下评论部分中的内容。
他们不必100%准确,我怀疑类/包的整体结构会在没有完全重写的情况下发生变化。
我个人认为这种大图概述非常有用,我相信还有其他人也有同感。