MATLAB-编程风格指南

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

转载]MATLAB编程风格指南(转载)原文地址:MATLAB编程风格指南(转载)作者:云辉之家MATLAB编程风格指南——RichardJohnsonVersion1.5,Oct.2002“Languageislikeacrackedkettleonwhichwebeattunedtodanceto,whileallthetimewelongtomovethestarstopity.”-GustaveFlaubert,inMadameBovary目录:一、简介二、命名规则1、变量2、常数3、结构体4、函数5、概要(General)三、文件与结构1、M文件2、输入输出四、语句(Statements)1、变量2、循环语句3、条件语句4、小结五、布局、注释与文档1、布局2、空白空间(WhiteSpace)3、注释4、文档六、参考文献一、简介有关MATLAB代码的建议通常强调的是效率,譬如说有关“不要用循环”等的建议,本指南与之不同。本指南主要考虑的是代码(格式)的正确性、清晰性与通用性。本指南的目的在于帮助写出更可能正确、易于理解、更具有共享性与更利于维护的代码。正如BrianKernighan写道:“Well-writtenprogramsarebetterthanbadly-writtenones--theyhavefewererrorsandareeasiertodebugandtomodify――soitisimportanttothinkaboutstylefromthebeginning.”(良好的写作规范的程序比糟糕的写作规范的要好,因为他们具有较少的错误、易于调试与修改,因此,从一开始就考虑风格是很重要的)。本指南列举的MATLAB代码编写的建议在软件开发小组实际工作中得到一致性的认可。本指南与C、C++与Java的同类手册在整体上是相似的,但是针对MATLAB的特征与历史进行了修正。指南中的建议是基于多种其他代码语言的指南与个人经验而来的。指南主要是针对MATLAB而写的,但是它对于相近的语言,如Octave、Scilab和O-Matrix等的编程也有所帮助。指南不是戒律,其目的在于简洁易懂地帮助程序员写出好的代码。许多组织有理由偏离这个目的。“Yougottoknowtherulesbeforeyoucanbreak'em.Otherwiseit'snofun.”――SonnyCrockettinMiamiViceMATLAB是MathWorks公司的注册商标,在本指南中,缩写TMW指TheMathworks公司。本著作献给那些致力于仔细提高进步的人们。二、命名规则PathrickRaume:“Arosebyanyothernameconfuestheissue。”(?玫瑰如果以其他名字则会导致事情的混乱)一个开发团体建立一个命名规则可能会成为一个可笑的争议性问题。本节描述了一个常用的规则。它对于单个的程序员理解命名规则特别有用。1、变量变量的名字应该能够反应他们的意义或者用途。(1)变量名应该以小写字母开头的大小写混合形式,譬如:linearity,credibleThreat,qualityofLife等。这在C++开发团体中是普遍实用的。TMW有时候以大写字母开头命名一个变量名,但是这种用法在其他的语言中通常作为类型或者结果的保留用法。(2)分割复合变量名的各个部分中间通常有两种做法,前面例子的这种(以大写字母分割)是其中的一种,虽然可读性比较好,但是在其他语言变量名中并不很常用。另外一种考虑的方法是在变量名中采用下划线,但是下划线在MATLAB的Tex解释程序中会将其翻译为下标转换符。(3)应用范围比较大的变量应该具有有意义的变量名,小范围应用的变量应该用短的变量名。实际上,大多数变量都应该具有有意义的变量名,短变量名通常作为结构申明时候必须阐明意义的情况下的变量的保留用法。当然,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用i,j,k,m,n(不过我认为最好少用i,j,因为他们作为MATLAB中的永久性常量表示虚数单位的。译者注),双精度数的时候常用x,y和z。(4)前缀n应该用在作为数值对象的申明的时候,这一符号来自于数学,在数学中这被作为标明数值对象的建立规则。例如:nFiles,nSegments。MATLAB一个附加的特别之处在于用m来表明行数(来源于matrix符号),例如变量名:mRows。(5)应该遵循的一个有关复数(pluralization)变量的惯例。此处的复数应该是指包含多个个体的变量,相对于单数(singular)而言。一个实用的建议是将所有变量名要么为单数形式,要么为复数形式。两个变量只是最后相差一个字母s加以区别的情况应该避免。一个可以接收的选择是对于复数利用后缀Array。例如:point,pointArray(前者为单数,后者为复数)(6)只代表单个实体数据的变量可以加以后缀No或者是前缀i。符号No来自于数学在表明实体数据的时候的建立规则。例如:tableNo,empolyeeNo(7)前缀i使得变量命令可以循环进行。例如变量名:iTable,iEmployee(8)循环变量应该以i、j、k等为前缀该符号来源于数学在表明一个循环的时候的变量建立规则。例如:foriFile=1:nFiles…end注意:当应用中有复数数据的时候,应该禁用i、j,因为他们都是作为虚数单位使用。(9)对于嵌套循环,循环变量应该以字母表的顺序。对于嵌套循环,循环变量应该命名为有帮助意思的变量名。例如:foriFile=1:nFilesforjPosition=1:nPositions…endend(10)否定式的布尔变量命名是应该避免的当采用否定式的布尔变量命名法时,如果采用逻辑运算取非的操作符号对变量进行链接运算的时候,将出现双重否定的情况。例如,用~isNotFound没有采用isFound直观。因此避免使用类似于isNotFound这样的变量名。(11)缩写形式,即使是通常的大写缩写,也应该于小写字母混合使用全部使用大写字母作为基本的变量名与上面给出的命名规则相冲突。这种类型的变量只有被命名为类似于dVD,hTML等形式的变量名,很显然这将使得其不具有可读性。当这样的变量名与其他的相联合的时候,其可读性严重降低;下面的单词的缩写很难看出他们的本来代表的意思了。采用:html,isUsaSpecific,checkTiffFromat()避免使用:hTML,isUSASpecific,checkTIFFFormat()(12)避免使用一个关键字或者特殊意义的字作为变量名当它的保留字或者内建的特殊值被重新定义的时候,MATLAB会给出一个模糊的出错信息或者是奇怪的结果。保留字在命令关键字中列出,特殊值在文档中列出了的。2、常数(1)命名常数(包括全局变量)应该采用大写字母,用下划线分割单词这个规则在C++开发团体中是非常普遍的。尽管TMW的代码中可能会出现一下小写字母命名常数的情况,例如:pi,这种内建常数事实上是函数。示例:MAX_ITERATIONS,COLOR_RED(2)参数可以以某些通用类型名作为前缀这样命名的常数给出了个附加信息,指明它们属于哪类以及他们代表的意义。如:COLOR_RED,COLOR_GREEN,COLOR_BLUE3、结构体(1)结构体的命名应该以一个大写字母开头这与C++实际编程规范一致的,有助于区分结构体与普通变量。(2)结构体的命名应该是暗示性的(implicit),并且不需要包括字段名(fieldname)例如下面例子给出的重复是多余的。例:应采用Segment.length避免用Segment.SegmentLength4、函数函数名应该那个说明他们的用途。(1)函数名应该采用小写字母将函数名与它的m文件名保存为相同的是头脑清晰的做法。采用小写字母可以避免混合系统操作时候潜在的文件名问题。示例:getname(.),computetotalwidth()还有另外两种普遍使用的函数名命名规则。一些人喜欢用下划线在函数名中增加其可读性,另外一些人则根据上面提到的变量的命名规则对函数进行命名。(2)函数名应该是具有意义的存在一种不好的MATLAB惯例,那就是采用短的函数名,这经常使得其名字含糊不清。这或许是因为DOS的8个字母的命名规则的限制造成的影响。这种考虑担忧是没有必要的了,为了增加其可读性,这种习惯也应该避免。例如:采用:computetotalwidth()避免:compwid()但是对于那些在数学中广泛使用的缩写或者首字母缩写的情况是个例外。譬如:max(),gcd()等具有这种短的函数名的函数应该在最开始的注释的地方有完整的整个单词使得其意义清楚并且支持lookfor命令的查询搜索。(3)单输出变量的函数可以根据输出参数命名这在TMW的代码中也是经常采用的,譬如:mean(.),standarderror(.)等(4)没有输出变量或者返回值为句柄的函数应该根据其实现的功能命名这种规则可以增强可读性,使得很清楚函数应该(或者不应该)干什么。这就使得代码很简洁明了并且易于理解其功能。示例:plot(.)(5)前缀get/set应该作为访问对象或者属性的保留前缀这一条在TMW与C++以及Java开发实际中经常使用。一个合理的例外是用set作为逻辑置位的操作。示例:getobj(.);setappdata(.)(6)前缀compute应该用在计算某些量的函数的地方一致应用这一条规则是为了加强可读性。它给读者一条线索:这里是潜在的比较复杂的、或者比较耗时的操作。示例:computweightedaverage();computespread();(7)前缀find可以用在那些具有查询功能的函数的地方这使得读者能够理解得到一条线索:这里是一个查询方法,包含有少量计算。一致应用这条规则可以增强其可读性,是get的一个好的替换品。示例:findoldestrecord(.);findheaviestelement(.);(8)前缀initialize可以用在对象或者是概念(concept)建立的地方美语中initialize就是指的是英国英语中的initialise。应该避免使用缩写形式init。示例:initializeproblemstate()(9)前缀is应该用在布尔函数的命名的地方这通常在TMW的代码以及C++与Java代码中普遍使用。示例:isoverpriced();iscomplete()在某些环境下,存在少量的替代它的前缀,包括has,can以及should等前缀。(10)补足型(complement)名称应该用在补足型(complement)操作的地方下面通过一个小的归纳减少一个一个说明的复杂性。示例:get/set,add/remove,create/destroy,start/stop,insert/delete,increment/decrementold/new,begin/end,first/last,up/down,min/max,next/previous,open/closeshow/hide,suspend/resume,等(11)避免无意识地覆盖(shadowing)通常,函数的命名应该是唯一的(unique)。覆盖(shadowing)(两个或者多个函数具有相同的函数名)会增加不可预测的行为或者错误。可以通过which–all或者是exist来检查文件名重复的情况。5、常规(1)命名多维变量与常量应该具有单位后缀只采用单一的单位集合是一个很不错的想法,但是通常在程序的完整实现很少见的。增加单位后缀可以帮助避免必然的混淆。示例:incidentAngleRadians(2)命名中应该避免缩写利用完整的单词命名可以减少含糊,有利于使得代码自成为文档(self-documenting)

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功