编程风格不仅仅是关乎代码质量问题,更是一种艺术修养问题,糟糕的不良的丑陋的编程风使代码维护变得困难,而且无形中也增加了产生bug的频率。
什么样的编程风格才是优秀的?
- 养成一种良好的编程风格并长久坚持之。不管是平时代码练习,还是实际参与项目开发,都应该按那种编程风格编码,千万记住,好的编程风格不仅让你受益终身,更需要你坚持不懈。
- 注释恰到好处。为每个函数编写前置条件和后置条件,前置条件说明调用此函数时候需要满足的条件,各个参数的取值范围;后置条件说明当前置条件成立时调用该函数产生的结果,也就是这个函数完成什么任务、有什么功能。为每个类写注释,说明这个类有多少个变量,多少个函数,完成什么任务,如果成员函数中有用到自由内存分配(new和delete),那么你注释应该准确的反应这些事实,以让有经验的程序员维护你的代码时能更方便。为每个类的私有成员写注释,为每个全局变量写注释,为每个不那么容易读懂的变量和算法写注释。
- 变量命名要合理,尽量不要用拼音,尽量用英文,如果不懂英文请上Google。推荐用微软的匈牙利命名法,如果觉得麻烦,可以对其进行变式。整形变量前面加n,指针变量前加p,等等。用 GetFileName而不是getfilename,或者get_file_name,当然,这都只是建议,更具体的匈牙利命名法。
- 权衡可读性和效率,比如,在效率要求不高的地方,尽量用可读性高的代码,for example,判断int型的变量a是否为偶数,可用if(a%2==0)或者if(!(a%2)),if(a&1)这些代码中,显然第一个可读性最好,第三个效率最高,在实际编程中采用哪个,各位自己权衡吧。
- 尽量用括号,除非你对C中的的运算符的优先级非常熟悉,否则还是多打几个括号比较好,比如cout<<1&+!5^6;这个输出什么?在展示你的智商时,我希望你多花时间在提高代码的可维护性和低bug产生率上。
- 如果if语句里面只有一条语句,也请加上{},这对于提高可读性有帮助的。真的。你试试?
匈牙利命名法
匈牙利命名法计算机程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。匈牙利命名法有两种:系统匈牙利命名法和匈牙利应用命名法。
匈牙利命名法被设计成语言独立的,并且首次在BCPL语言中被大量使用。由于BCPL只有机器字这一种数据类型,因此这种语言本身无法帮助程序员来记住变量的类型。匈牙利命名法通过明确每个变量的数据类型来解决这个问题。
在匈牙利命名法中,一个变量名由一个或多个小写字母开始,这些字母有助于记忆变量的类型和用处,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写以区别前面的类型指示字母。
系统命名法与应用命名法的区别在于前缀的目的。
在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如:
- lAccountNum :变量是一个长整型("l");
- arru8NumberList :变量是一个无符号8位整型数组("arru8");
- szName :变量是一个零结束字符串("sz"),这是西蒙尼最开始建议的前缀之一。
匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。
- rwPosition :变量代表一个行("rw")。
- usName :变量代表一个非安全字符串("us"),需要在使用前处理。
- strName :变量代表一个包含名字的字符串("str")但是没有指明这个字符串是如何实现的。
系统匈牙利命名法的优点
- 从名字中就可以看出变量的类型
- 拥有类似语义的多个变量可以在一个代码块中使用:dwWidth, iWidth, fWidth, dWidth
- 变量名在仅仅知道他们的类型时可以被轻易记住
- 可以使变量名更加一致
- 决定一个变量名的时候可以更机械化,更快
- 不合适的类型转换和操作可以在阅读代码的时候被检测出来
- 在那些数字被当作字符串处理的基于字符串的语言中非常有用(例如Tcl)
- 在匈牙利应用命名法中,变量名确保不会犯以下错误:heightWindow = window.getWidth()
- 在使用动态类型语言或完全无类型的语言编程时,关于类型的修饰可以更简化。这种语言一般不包含类型修饰(或者可选),因此唯一可以看出哪些类型是被允许的只有名字本身、文档以及通过阅读代码来明白它们在做什么。在这些语言中,包含对于变量类型的指示可能会有助于程序员。就像上面提到的,匈牙利命名法扩展了这样的语言(BCPL)。
- 在包含许多全局对象的复杂程序中(VB/Delphi Forms),拥有一个基本的前缀命名法可以简化在编辑器中查找组件的工作。按btn
可以使编辑器弹出一个Button对象的列表。
本文地址:http://www.nowamagic.net/librarys/veda/detail/581,欢迎访问原出处。