我想知道编写结构良好的代码的基本原则和礼仪。
答案 0 :(得分:34)
阅读Code Complete,它会为所有事情创造奇迹。它会告诉你事情的地点,方式和时间。它几乎是软件开发的圣经(恕我直言。)
答案 1 :(得分:22)
在编写代码时,这些是最重要的两件事:
答案 2 :(得分:17)
MATLAB Programming Style Guidelines是一个很好的资源。
答案 3 :(得分:15)
好吧,如果你想要外行的话:
我建议人们编写最简单的可读程序。
关于如何格式化代码,命名变量,设计类和单独的职责,还有很多规则。但是你不应该忘记所有这些规则只是为了确保你的代码很容易检查错误,并确保它可以由原作者以外的其他人维护。如果记住上面的推荐,你的程序就是这样。
答案 4 :(得分:7)
此列表可能会持续很长时间,但有些重要的事情是:
两个好地方:
答案 5 :(得分:5)
如果您希望将某些内容用作参考或礼仪,我通常会按照我正在使用的任何语言(例如C++或Python)遵循Google官方风格约定。
Rob Pike和Brian W. Kernighan的The Practice of Programming也有一个关于风格的部分,我发现它很有帮助。
答案 6 :(得分:5)
首先,“代码”不是正确的用词。代码是另一种东西的表示,通常是数字。正确的单词是“源代码”,源代码的复数是源代码。
-
编写好的源代码:
计算机编程有很多时尚。他们的支持者认为那些没有追随时尚的人并没有那么开心,也没有非常随意。目前的主流时尚似乎是“测试驱动开发”和“敏捷”。 20世纪90年代的时尚是“面向对象编程”。了解周围的想法的有用核心部分,但不要教条,并记住最好的计划是完成工作所需的工作。
非常过度压缩代码的简单例子
for(int i=0,j=i; i<10 && j!=100;i++){
if i==j return i*j;
else j*=2;
}}
虽然这更具可读性:
int j = 0;
for(int i = 0; i < 10; i++)
{
if i == j
{
return i * j;
}
else
{
j *= 2;
if(j == 100)
{
break;
}
}
}
第二个例子具有清晰可见的退出循环的逻辑;第一个例子的逻辑与控制流程纠缠在一起。请注意,这两个程序完全相同。 我的编程风格占用了大量代码,但我从来没有遇到过关于风格难以理解的抱怨,而我发现更简洁的方法令人沮丧。
经验丰富的程序员可以并且将会同时阅读 - 上述内容可能会使他们暂停一下并考虑发生了什么。强迫读者坐下来盯着代码并不是一个好主意。代码需要显而易见。每个问题都具有表达其解决方案的内在复杂性。代码不应该比解决方案的复杂性更复杂,如果可能的话。
这是另一张海报试图传达的内容 - 不要让程序比需要更长。更长的时间有两个含义:更多的代码行(即,将行括号放在自己的行上),更复杂。使程序比需要更复杂并不好。让它更具可读性是好的。
答案 7 :(得分:3)
看一看
97 Things Every Programmer Should Know。
它是免费的,包含很多像这样的宝石:
我认为有一个引用 对所有软件特别有用 开发人员要了解并密切关注 他们的心:
风格,和谐与优雅之美 良好的节奏取决于简单性。 - 柏拉图
我认为总结一句话 我们作为软件的价值观 开发者应该向往。
我们努力做很多事情 在我们的代码中:
柏拉图告诉我们启用 所有这些品质的因素是 简单。
- 可读性
- 可维护性
- 发展速度
- 难以捉摸的美丽品质
答案 8 :(得分:2)
关于 Matlab :
的精彩答案的一小部分补充避免使用长脚本,而是将函数(子例程)写入单独的文件中。这将使代码更易读,更容易优化。
使用Matlab的内置函数功能。也就是说,了解Matlab提供的许多功能,而不是重新发明轮子。
使用code sectioning,以及最新的Matlab版本提供的其他代码结构。
Learn how to benchmark您的代码使用timeit
和profile
。您会发现有时for循环是更好的解决方案。
答案 9 :(得分:2)
单元测试
Python和matlab是动态语言。随着代码库的增长,您将被迫重构代码。与静态类型语言相比,编译器不会检测项目中的“损坏”部分。使用像xUnit这样的单元测试框架不仅可以补偿缺少的编译器检查,还可以通过对项目的所有部分进行连续验证来进行重构。
来源控制
使用svn,git或任何其他衍生产品等版本控制系统跟踪源代码。您将能够在代码历史中来回切换,为部署/发布版本创建分支或创建标记。
错误跟踪
如果可能,请使用错误跟踪系统与源控制系统连接,以便始终处理问题。您可能无法或被迫立即解决问题。
减少熵
在现有代码库中集成新功能时,您将添加更多代码行,并且可能更复杂。这会增加熵。尝试通过引入接口或继承层次结构来保持设计清洁,以便再次减少熵。不注意代码熵会使代码无法长期维护。
以上提到的所有内容
纯编码相关主题,如使用样式指南,而不是复制代码,...,
已被提及。
答案 10 :(得分:2)
您可以查看斯坦福大学的在线课程:Programming Methodology CS106A。教师已经给出了几个非常好的编写源代码的指令。
其中一些如下:
编写程序供人们阅读,而不仅仅是计算机阅读。他们俩都需要能够阅读它,但是一个人阅读并理解它并且计算机仍能正确执行它更为重要。但这是第一个主要的软件工程原理 想一想。
如何发表评论: 发表评论以澄清程序中的内容,这些内容并不明显
如何进行分解
答案 11 :(得分:2)
几乎所有人都在这里说,还有更多。在我看来,关于你正在寻找什么的最好的网站(特别是蟒蛇部分的禅是有趣和真实的)
http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
谈论PEP-20和PEP-8,一些复活节彩蛋(有趣的东西)等......
答案 12 :(得分:2)
上面已经提出了很多好处。我绝对是第二名。我还想补充一点,编码中的拼写和一致性是你练习的(也是现实生活中的)。
我曾与一些离岸团队合作,虽然他们的英语非常好,但他们的拼写错误引起了很多困惑。因此,例如,如果您需要查找某些函数(例如,getFeedsFromDatabase)并且它们拼写错误的数据库或其他内容,那么这可能是一个大问题还是小问题,具体取决于您对该特定函数的依赖程度。在代码中反复重复的事实将首先关闭,让你疯狂,其次,使其难以解析。
此外,在命名变量和函数方面保持一致性。有许多协议可以使用,但只要您与您的工作保持一致,您工作的其他人将能够更好地阅读您的代码并感谢它。
答案 13 :(得分:2)
就我个人而言,我发现我通过SICP学习了更多关于编程风格的知识,这是麻省理工学院简介到SCI SCI的文章(我大约有四分之一的时间。)比任何其他书都要多。话虽这么说,如果您打算使用Python,Google风格指南是一个很好的起点。
我在某处读到大多数程序(无论如何都是脚本)应该永远不会超过两行。所有必需的功能都应该被抽象为函数或类。我倾向于同意。
答案 14 :(得分:2)
European Standards For Writing and Documenting Exchangeable Fortran 90 Code一直存在我的书签中,就像永远一样。此外,这里有一个主题,因为您对MATLAB感兴趣,on organising MATLAB code。
答案 15 :(得分:2)
Python Style Guide始终是一个很好的起点!
答案 16 :(得分:1)
使其可读,使其直观,使其易于理解,并使其评论。
答案 17 :(得分:1)
当我提出这个问题时,我得到的最好建议如下:
Never code while drunk.