Matlab编程风格
代码格式要正确,表达清晰、通用,这样才能写出具有共享性和容易维护的代码。良好的代码写作规范,使得程序容易调试,便于修改。因此需要采用一种比较通用规范的编程风格。本文内容来源于罗华飞编著的《Matlab GUI设计学习手册》中关于编程风格的描述,在今后的Matlab编程分享中尽量采用其编程风格,便于大家理解和交流。在此向大神致敬。
1.命名规则
(1)变量
变量名用小写字母开头,采用大小写混用模式或下划线分割模式。例如isOpened、serial_open。(原因:用C++进行编程时,经常用到类和指针,用户在查找类的成员函数或者成员变量使,不可能把所有的类成员记得清清楚楚,一般是先输入类成员的首字母或开始几个字母,然后根据编辑器的下拉列表框,寻找需要的类成员。于是大家约定,所有的类成员均以小写子母开头,以方便类成员的查找)
1) 临时变量:临时变量的的变量名应该尽量短。习惯上,m,n,表示int类型的临时变量(不使用i、j,因为与Maltab内部的虚数单位冲突);c,ch等表示字符类型的临时变量;a表示临时数组 ;x、y、z表示双精度临时变量。
2) 前缀m或者n通常用于申明数值对象,m代表matrix,n代表number。例如mRows、nFiles。
3) 前缀p表示指针;前缀str表示字符串;前缀st表示枚举、结构或者联合体;前缀b表示布尔型变量。
4) 表示对象与对象集合的变量名,不要仅仅只相差一个后缀‘s’,应该在后面加一个Array。例如point是一个点,而pointArray是一个点集。
5) 尽量避免变量名以数字区别、以大小写区别或者加以s区别,因为变量名相似容易混淆,应避免。例如Temp和temp,value1和value2等都是不好的编程习惯。
6) 只表示单个实体数据的变量, 可以添加前缀i或后缀No(来源于英文"No.")。例如dataNo、iData等。
7) 循环变量应该以i、j或者k为前缀,涉及复数运算应该禁止使用i和j作为循环变量(容易发生冲突)。可使用iRow、jLine、jColumn表示行或列。
8) 布尔变量应该禁止使用否定式的变量名,例如使用isOpend而不用isClosed。
9) 缩写形式即使全部为大写字母,在变量命名时也应该与小写字母混合使用,例如使用udpSoket而不用UDPSoket。
10 ) 禁止使用关键字或者保留字作为变量名,例如禁止使用clear、clc、end、global等。
(2)常量
1)常量名、全局变量名、永久变量名应该全部采用大写字母,且下划线分割单词。
2)可以采用对象的类型名作为前缀,例如采用COLOR_RED。
(3)结构体
1)结构体名应该以大写字母开头。这样约定是为了与普通变量名加以区别。
2)结构体的字段名不需要包含结构体名的含义。
(4)函数
1)MATLAB中定义的大部分系统函数都是采用纯小写字母作为函数名的,新版MATLAB部分函数会采用小驼峰命名法(第一个单词以小写字母开头;第二个单词的首字母大写)来命名,如前面讲到的matlabFunction函数。
2)函数名应该有意义。可以采用大家广泛使用或者约定俗成的缩写,例如max、min、disp、std、diff等。
3)所有的函数命名应该采用英文的形式,禁止使用汉语拼音。
4)单输出参数的函数,可以根据输出参数的含义来命名。例如mean、sum等。
5)前缀get和set作为访问GUI对象的保留前缀;后缀get和set作为位运算的保留后缀。例如getappdata、setappdata、bitget、bitset等。
6)前缀find具有查询功能的函数,例如findobj;前缀compute用于具有计算功能的函数;前缀initialize用于具有初始化对象功能的函数;前缀is用于布尔函数,例如iscell;
2.文件与结构
1)模块化设计。不同的功能分为不同的模块,单独进行设计。
2)函数之间尽量采用输入输出参数进行通信。单输入参数较多时,考虑采用结构体。例如:每个GUI回调函数都有一个handles结构体作为输入参数。
3)多处出现的代码块,要考虑封装在一个函数中,以提高代码的简洁性和复用性。
4)只被另外一个函数调用的函数,应该作为一个子函数,写在同一个文件中。
3.基本语句
总体原则:避免使用含糊代码。代码不是越简洁越好,而是越清晰越好。
(1) 变量
1) 在内存充足的情况下,变量尽量不重复使用,赋予每个变量唯一的含义,提高代码的可读性。
2) 同种类型且意义相近的变量,可以在同一语句中定义;不同意义的变量,不要在同一语句中定义。
3) 在文件开始的注释处,为重要的变量编写文档;
4) 在常量定义处,为该常量编写注释。
5) 尽量少的使用全局变量。全局变量过多,不利于代码的维护和阅读。
6) 浮点数的逻辑运算要当心系统误差。
(2)常数
尽量在表达式少用数字,可能会改变的数字用常数代替,便于程序的修改。
浮点数应该在小数点前写上0。例如0.5不要写成.5。
(3)循环语句
1) 不要在循环语句中扩展数组的维数,应该预先给数组分配内存。如
result = zeros(1:100)'
for i = 1:100
result(i) = i^2;
end
2) 循环中尽量少用break和continue,以增强代码的可读性。
3) 嵌套循环时,应该在每个end添加注释,注明该层循环完成什么功能。
(4)条件语句
1) 避免使用复杂的条件表达式,而采用临时逻辑变量代替。
2) if-else中,频繁事件要放在if的部分,偶尔事件放在else部分。
3) switch应该包含otherewise条件,以避免出现不可预料的错误。
4) switch变量应该是字符串。
(5)注释
1)注释应该简介易懂;
2)函数头部的注释应该支持lookfor和help的对函数的查询,因此该行的注释中应该包含尽可能多的关键字。
3)函数头部的注释应该描述函数的功能,并能列出输入参数不同时该函数的语法和功能。
4)在函数头部的注释中,建议该函数的函数名全部大写。
5)在函数头部的注释中,最后要加上版权申明和程序版本。
6)函数头部的注释建议全部用英文。
(6)排版
1) 每行代码控制在80列之内,代码分行采用符号“...”。M文件编辑器中第75列有一条灰色的竖线,分行时尽量选择在该竖线附近。
2) 代码分行显示的3条原则
① 在一个逗号或者空格之后分行;
② 在一个操作符之后分行;
③ 分行时对齐表达式。
3) 代码的缩排一般为三个空格或者一个“Tab”建议使用Matlab默认的缩排格式。
4) 一行代码应该只包含一个可执行语句。
5) 合理使用空格。
① 在=、==、~=、>、<、|、||、+、-、*、/等前后都加空格、
② 在~、^等前后不加空格。
③ 在逗号、分号的后面添加空格,前面不加空格。
此章节完,感谢观看。