编写优秀代码的技巧

转载请注明出处:http://blog.csdn.net/joker_ya/article/details/41041747

OK。继续摘录优化方面的内容。这次是有关编写优秀代码的技巧方面的内容,详情请继续阅读。

 

编写优秀代码的技巧

1.使用好的编码风格和合理的设计

在进行编码工作之前应先考虑总体的设计方案。都说最好的计算机程序的文本是结构清晰的,从实现一套清晰的API、一个逻辑系统结构以及一些定义良好的组件角色与责任开始入手,将会使你避免以后发生很多的错误。我们可以通过采用良好的编程风格来防范大多数编码错误。尽量选用有意义的变量名,或者审慎地使用括号,都可以使编码变得更加清晰明了,并减少缺陷出现的可能性。


2.不要仓促地编写代码

急功近利的编程习惯很多人都有,并且将来还会有。使用这种编程方式的程序员会很快地开发出一个函数,马上把这个函数交给编译器来检查语法,接着运行一遍看看能不能用,然后就进入下一个任务。这种方式充满了危险,建议大家要避免。

我们只有在完成与一个代码段相关的所有任务之后,才能进入到下一个环节。例如,如果你决定先编写主体部分,再加入错误检查和处理,那么一定要确保这两项工作的完成都是遵循章法。如果你要推迟错误检查的编写,而直接开始编写超过3个代码段的主体部分,则你一定要慎之又慎。你也许真的想随后再回来编写错误检查,但却一而再再而三地向后推迟,这期间你可能会忘记很多上下文,使得接下来的工作更加耗时和琐碎。


3.编译时打开所有警告开关

大多数语言的编译器都会在一定程度后给出一大堆错误信息。建议在任何情况下都要打开编译器的警告功能。如果代码产生了任何的警告信息,应立即修正代码,让编译器的报错声停下来。在启用了警告功能之后,不要对不能安静地完成编译的代码感到满意。警告的出现总是有原因的。即使你认为某个警告无关紧要,也不要置之不理;否则,总有一天这个警告会隐藏一个确实重要的警告。


4.编码要清晰

如果要你从简洁(但是有可能让人困惑)的代码和清晰(但是有可能比较冗长)的代码中选择,一定要选那些看上去和预期相符合的代码,即使它不太优雅。例如,将复杂的代码运算拆分为一系列单独的语句,使逻辑更清晰。简单就是一个种美,不要让你的代码过于复杂。


5.使用安全的数据结构

最常见的安全隐患一般是由缓冲溢出引起的。缓冲溢出是由于不正确地使用固定大小的数据结构而造成的。如果你的代码在没有检查一个缓冲的大小之前就写入这个缓冲,那么写入的内容总是有可能会超过缓冲的末尾的。避免由于这些隐患而受到攻击的方法就是不要编写这样的糟糕代码,使用更安全的、不允许破坏程序的数据结构,也可以对不安全的数据类型系统地使用安全的操作。


6.使用静态分析工具

还有许多独立的静态分析工具可供使用,如用C语言的lint(以及更多新出的衍生工具)和用于.NET汇编程序的FxCop。你的日常编程工作应包括使用这些工具来检查代码,它们能够比编译器挑出更多的错误。


7.检查所有的返回值

如果一个函数返回一个值,它这样做肯定是有理由的。检查这个返回值,如果该返回值是一个错误代码,则必须辨别这个代码并处理所有的错误。不要让错误悄无声息地侵入你的程序,忍受错误会导致不可预知的行为。这既适用于用户自定义的函数,也适用于标准库函数。你会发现:大多数难以察觉的错误都是因为程序没有检查返回值而出现的。不要忘记,某些函数会通过不同的机制(例如标准C库的errno)返回错误。不论何时,都要在适当的级别上捕获和处理相应的异常。


8.谨慎处理内存

用户必须及时、彻底地释放在执行期间所获取的任何资源。内存是这类资源最常提到的一个例子,文件和线程锁也是需要小心使用的宝贵资源。不要因为觉得操作系统会在你的程序退出时清除程序,就不注意关闭文件或释放内存。对于代码还会执行多长时间,是否会耗尽所有的文件句柄或占用所有的内存,很多用户都不太了解,甚至用户不能确定操作系统是否会完全释放资源,有的操作系统就不是这样的。

Java使用垃圾回收器来执行这些繁重的清洁工作,所以你可以“忘记”释放资源。让它们进入工作状态,这样在运行时将会不时地进行清扫。这真是一个享受,不过,不要因此而对安全性抱有错误的想法。你仍然需要思考,且必须显式地终止对那些不再需要,或不会被自动清除的对象的引用,而不要意外地保留对对象的引用。需要注意的是,不太先进的垃圾回收器也很容易会被循环引用蒙蔽(例如,A引用B,B又引用A,除此之外没有对A和B的引用)。这回导致对象永远不会被清除,这是一种难以发现的内存泄露形式。


9.使用标准语言工具

用户应明确地定义正在使用的是哪个语言版本。除非你的项目要求你(最好是有一个好的理由),否则不要讲命运交给编译器,或者对该语言进行任何非标准的扩展。如果该语言的某个领域还没有定义,就不要依赖你所使用的特定编译器的行为(例如,不要依赖你的C编译器将char作为有符合的值对待,因为其他的编译器并不是这样的)。这样做会产生非常脆弱的代码。当你更新了编译器之后,会发生什么?当一位新的程序员加入到开发团队中,如果他不理解那些扩展,会发生什么?依赖于特定编译器的个别行为,将导致以后难以发现的错误。


10.谨慎强制转换

大多数语言都允许用户将数据从一种类型强制转换(或转换)为另一种类型。这种操作有时比其他的操作更成功。如果你真的想使用强制转换,就必须对之深思熟虑。你所告诉编译器的是:“忘记类型检查吧,我知道这个变量是什么,而你并不知道。”你在类型系统中撕开了一个大洞,并直接穿越过去。这样做很不可靠。如果你犯了任何一种错误,编译器将只会静静地坐在那里小声嘀咕道:“我告诉过你的。”如果你很幸运(例如使用Java或C#),在运行时可能会抛出异常以让你了解发生了错误,但这完全依赖于你要进行的是什么转换。


11.使用好的诊断信息日志工具

当编写新的代码时,常常会加入很多诊断工具,一确定程序的运行情况。在调试结束后是否应该删除这些诊断信息呢?保留这些信息对以后再次访问代码会带来很多方便,特别是如果在此期间可以有选择地禁用这些信息。有很多诊断信息日志系统可以帮助实现这种功能。这些系统中很多都可以是诊断信息在不需要的时候不带来任何的开销;可以有选择地使它们不参加编译。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值