良好的编程习惯

***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

***************************************************


良好的编程习惯
      良好的习惯对于人的成长是非常重要的,良好的编程习惯对于我们编程能力的提高也是非常重要的。我们编程时要有良好的风格,源代码的逻辑简明清晰,易读易懂是好程序的重要标准。
     其实编程的过程中最容易忽略的还是程序的“风格”。这些东东有时让人挺烦的,刚刚放射出光茫的思想似乎被约束住了,本来是灵感发现,还要在后面罗索上半天。
     程序需要风格吗?让我们的程序写得更加平易近人,更加生动对我们的编程是大有益处的。对我们的程序学习也能起到事半功倍的作用。编程过程中遵守的不成文的标准,对于我们和他人的交流和自己的再学习都是有益无害的。毕竟有时我们写的程序不是只给自己看的,也不是一时兴起,不管以后。 好的编码可使源代码的可读性强且意义清楚,与其他语言约定相一致,并且尽可能直观。我们自己一眼能看出个大概,在别人眼中也不至于成为千古奇书。下面以VB为例,对程序风格做一下全面的概述,希望对您的编程水平的提高有所帮助。

---------------------------------------------------------------------------------------------------------
一、程序内部文档应具备的规则
1、标识符应含有含义鲜明的文字。
     含义鲜明的文字,能正确地提示程序对象所代表的实体。这对于帮助阅读者理解程序是非常重要的。如果用缩写的形式,那么缩写规则应该一致,并且应该给每个名字加注解。在VB中,主要有如下的约定:
(一)对象命名约定
     应该使用一致的前缀来命名对象,使人们容易识别对象的类型。例如我们常用控件CommandButton(命令按钮)可用cmd做为其前缀。Form以frm,Image以 img ,Label以 lbl,List Box 以lst,PictureBox以 pic,Timer以 tmr,等等,在我们编程的过程中,我们看到下面的名称cmdExit我们就知道这一定是一个命令按钮了。如果是第三方提供的控件,我们的说明最好要清晰地标出制造商的名称,以区别于我们的常用控件。
(二)常量和变量命名约定
     除了控件以外,常量和变量也是我们编程过程中经常遇到的,我们和他们打交道也是通过名字。
(1)给变量加范围前缀
     变量按其作用范围可分做三类,过程级,模块级和全局,所以我们在编程的过程中应将三者加以区别。我们在使用变量时,为了更好地体现代码重用和可维护原则,其定义范围应尽量缩小,这样将使我们的应用程序更加容易理解和易于控制。在VB应用程序中,只有当没有其他方便途径在窗体间共享数据时才使用全局变量。当使用全局变量时,在一个单一模块中声明它们,并按功能分组,给模块取一个有意义的名字。较好的编码习惯是尽可能地定模块化的代码。除了全局变量,过程和函数应该仅对传递给它们的的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分标识出来。变量的作用范围前缀如下:全局 g(global) ,模块级 m(model),本地过程不需要使用。例如:gintFlag,表示全局整型变量,mstrPassword,可表示模块级字符型变量。
(2)声明所有变量原则。声明所有变量将会节省编程时间,键入错误将大大减少,我们可在程序开始写上如下语句:
     Option Explicit
     该语句要求在程序中声明所有变量。
(3)变量数据类型声明。可通过下面的前缀来做为变量的数据类标志。
     Boolean bln
     Byte byt
     Double dbl
     Integer int
     String str
(4)常量。常量的命名,可遵循与变量命名大体相同的原则。
(5)对变量和过程名作出描述。变量或过程名的主体应该使用大小写混合的形式,并且应该足够长以描述它的作用。而且,函数名应以一个动词开头。如JudgeDialog。

2、适当的注解
注解是程序员和程序读者通信的重要手段,正确的注解非常有助于对程序的理解。VB中代码注解约定如下:所有的过程和函数都应该以描述这段过程的功能的一段简明的注释开始,说明该程序是干什么的,至于是如何做的,也就是编程的细节,最好不要包括。因为可能日后我们要修改程序,这样做会带来不必要的注释维护工作,如果不修改,将提供误导信息,可能成为错误的注释。因为代码本身和后面程序中的注释将起到相应的说明作用。
     过程中的注释块应该包括如下标题:
     小节 描述内容
     目的 该过程完成什么
     假设 列出每个外部变量、控件、打开文件或其他不明显元素
     效果 列出每个被影响的外部变量、控件或文件及其作用(只有当它不明显时)
     输入 每一个可能不明显的参数。
     返回 函数返回值的说明
格式化代码
(1)标准的,基于制表位的嵌套应该包括一个嵌注释,来描述该变量的使用。
(2)变量、控件及过程的命名应该足够清楚,使得只有复杂的执行细节才需要嵌入注释。
(3).bas 模块包含包含工程的VB一般常量声明,在其起始处,应包括程序的综述,列举主要数据对象,过程、算法、对话、数据库及系统需求。

3、程序的视觉组织
     程序的视觉组织可用阶梯式,结构化的程序风格对于我们实际编程也很有意义,可极大地改善代码的可读性。主要有代码注释和一致性缩进。

---------------------------------------------------------------------------------------------------------
二、数据说明
     数据结构的组织和复杂程序是在设计期间就已经确定了的,然而数据说明的风格却是在写程序时确定的。为了使数据更容易理解和维护,有一些比较简单的原则应该遵循。
     1、数据说明的次序应该标准化。有次序就容易查阅。因此能够加速测试、调试和维护的过程。当多个变量名在一个语句中说明时,应按字母顺序排列这些变量。
     2、数据结构复杂时,应加以说明其特点和实现方法。

---------------------------------------------------------------------------------------------------------
三、语句构造
     语句构造原则:每个语句应该简单而直接,不能为了提高效率而使程序变得过分复杂。下述规则的使用有助于语句简单明了。
     1、不要为了节省空间把多行语句写在一行;
     2、尽量避免复杂的条件测试;
     3、尽量减少对“非”条件的测试;
     4、避免大量使用循环嵌套和条件嵌套
     5、利用括号使逻辑表达式或算术表达式的运算次序清晰直观。

---------------------------------------------------------------------------------------------------------
四、输入输出
     1、对所有输入数据都进行检验;
     2、检查输入项重要组合的合法性;
     3、保持输入格式简单;
     4、使用数据结束标志,不要要求用户指定输入数据的数目
     5、明确提示交互式输入的请求,详细说明可用的选择或边界数值;
     6、当语言对格式有严格要求时,应保持输入格式一致
     7、设计良好的输出报表;
     8、给所有输出加标志;

---------------------------------------------------------------------------------------------------------
五、效率
     效率三原则:
     1、效率是性能的要求,需求分析时就应确定;
     2、效率是靠设计提高的;
     3、程序的效率和程序的简单程序是一致的。
(一)运行时间
     (1)写程序前先简化算术和逻辑表达式;
     (2)他细研究嵌套的循环,以确定是否有语句从内层移到外层;
     (3)尽量避免使用多维数组;
     (4)尽量避免使用指针和复杂的表;
     (5)使用执行时间短的算术运算;
     (6)不要混合使用不同的数据类型;
     (7)尽量使用整数运算和布尔表达式
(二)存储器效率
(三)输入输出效率
     如果用户是为了给计算机提供输入信息或为了理解计算机输入的信息,所需花费的脑力劳动是经济的,那么,人和计算机之间的通信效率就高。简单清晰是关键。

---------------------------------------------------------------------------------------------------------
六、小结
     其实风格是非常重要的,程序的外表是我们交流中不可缺少的东西。象我们常说的红颜命薄而归疚于外表太靓,也常听一些才子佳人的悲剧故事,提醒我们外表美而引出的一见钟情的浪漫不可取。可让人细想,才子佳人产生悲剧虽多,可也让人找到过心动和美好的感觉,做为一个人,活了一辈子,连那种感觉都未体验到,岂不比悲剧更加令人觉得可悲!编程亦然。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ntfs for mac使用注意事项有哪些?

2019独角兽企业重金招聘Python工程师标准>>> mac的用户有很多,一些用户朋友会发现自己的电脑是无法读写ntfs驱动器的。而ntfs驱动器又是一种常用的驱动器。面对这种情况我们可以选择用NTFS for Mac软件来帮助我们,它可以读写ntfs驱动器&#…

android音乐播放器文章,Android复习09【内容提供者、音乐播放器】

目 录PersonCpPersonCp.javainsert()ContentObserver音乐播放器1、添加读写权限1.1、动态权限授予(调用封装好的方法)2、获取音乐文件(MainActivity.java)2、Music.java(实体类)申请访问SD卡的权限设置适配器下拉刷新PersonCpPersonCp.javapackage cn.wangzg.personcp;import a…

程序员的业余项目

程序员的业余项目&#xff0c;我们也叫它 side project。 前几天&#xff0c;100offer 发起了一场活动叫 <寻找实干和坚持的技术力量>&#xff0c;他们是这么说的&#xff1a; 世界在被代码改变着&#xff0c;而我们在创造着代码。 仅仅是因为好玩&#xff0c;他开发了…

C语言的数组名和对数组名取地址

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 相信不少的C语言初学者都知道&#xff0c;数组名相当于指针&#xff0c;指向数组的首地…

小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点

3月8日&#xff0c;谷歌放出了首个安卓9.0开发者预览版的固件包&#xff0c;不出意外的话&#xff0c;它的正式版会在今年正式亮相。但对广大安卓用户来说&#xff0c;想要立刻用上最新系统并非易事。目前来说&#xff0c;安卓碎片化问题依然严重&#xff0c;我们不妨现实点&am…

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的&#xff0c;数组可以通过索引下标进行元素的查询&#xff0c;字典可以通过键下标来获取相应的值。在使用数组时&#xff0c;一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了&#xff0c;那么对不起&#xff0c;如果由…

大小端模式的快速判断方法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 大小端的问题剖析&#xff1a; 嵌 入式系统开发者应该对Little-endian和Big-endian模…

【RAC】How to Proceed from Failed 11gR2 CRS Installation

Applies to: [ID 942166.1] Oracle Server – Enterprise Edition – Version: 11.2.0.1 to 11.2.0.2 – Release: 11.2 to 11.2 Generic UNIX Generic Linux Goal This goal of this note is to provide steps to proceed from failed 11gR2 Grid Infrastructure installat…

WinForm支持拖拽效果

有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button&#xff0c;我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本。 其实这个操作主要分成三步走&#xff1a; 1&#xff09;确定被拖拽的对象&#xff1a; 这里是Button&#xff0…

win7 64位出现桌面右键鼠标显示忙碌

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 将下面绿色内容复制到txt文本中&#xff0c;然后另存为1.bat 双击运行即可 【针对64位…

android tee,Android 9.0的新增安全特性与TEE

Android P&#xff0c;预计将于 2018 年第三季度发布最终版本。特别是Android8.0以来&#xff0c;安全性是Android版本变更的一个重要因素。从安全性增强方面来看&#xff0c;本次Android9.0版本主要有以下几个方面&#xff1a;统一的指纹身份验证对话框Android P 中&#xff0…

哪些要素会让咱们呈现抑郁症的病症

依据最新研讨标明&#xff0c;一自个的性情怎样&#xff0c;本来是天然生成的&#xff0c;后天的日子&#xff0c;仅仅对咱们的性情进行批改&#xff0c;但在咱们潜意识中&#xff0c;违反自个性情的行动&#xff0c;会让咱们感到格外累&#xff0c;所以&#xff0c;不少人即是…

如何定义一个只能在堆上(栈上)生成对象的类?

在C中&#xff0c;类的对象建立分为两种&#xff0c;一种是静态建立&#xff0c;如A a&#xff1b;另一种是动态建立&#xff0c;如A* ptrnew A&#xff1b;这两种方式是有区别的。 静态建立一个类对象&#xff0c;是由编译器为对象在栈空间中分配内存&#xff0c;是通过直接移…

canny算子的理论分析

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

Android为spinner设置适配器,Android Spinner与适配器模式详解及实例代码

最近做项目对Android Spinner 使用&#xff0c;这里简单写个小例子&#xff0c;来测试如何使用。Spinner是一个下拉列表&#xff0c;往安卓界面中拖拽一个Spinner控件&#xff0c;在属性中设置Android:entries“array/spinner_data”其中spinner_data为在string中设置的数组。数…

web框架-Struts开始

问题&#xff1a; 为什么有structs 作为一种框架&#xff08;frameset&#xff09;可以与传统的mvc进行比较&#xff1f; MVC是一种模式数据处理、显示和数据输入分开&#xff0c;来规范开发&#xff0c;但是却又并不规范。可以这样想&#xff1a;有三家公司&#xff0c;他们对…

加快上架方法

估计最近苹果app应用上架的比较多&#xff0c;审核比较慢&#xff0c;现在一个app从提交到上架短则7&#xff0c;8天&#xff0c;长则2&#xff0c;3个星期。我在实际上线应用时&#xff0c;总结了一个简单实用的小技巧&#xff0c;可以加快上架时间&#xff0c;最近使用这种方…

接口自动化测试 返回html,接口自动化测试实战(更新完毕)

前言自动化没练习的项目怎么办&#xff1f;自动化已经成为测试的必备技能之一了&#xff0c;所以&#xff0c;很多想跳槽的测试朋友都在自学&#xff0c;特别是最实用的接口自动化&#xff0c;但是很多人因为没有可以练手的项目而苦恼&#xff0c;最终导致缺乏实战经验&#xf…

Opencv 图像增强算法 图像检测结果及代码

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

php Hash Table(四) Hash Table添加和更新元素

HashTable添加和更新的函数&#xff1a; 有4个主要的函数用于插入和更新HashTable的数据: int zend_hash_add(HashTable *ht, char *arKey, uint nKeyLen,void **pData, uint nDataSize, void *pDest); int zend_hash_update(HashTable *ht, char *arKey, uint nKeyLen, void …