MATLAB 代码规范
标识符命名原则
标识符的名字应当直观,其长度应当符合“最小长度,最大信息量”原则
非矩阵变量
- 变量名应该以小写字母开头的大小写混合形式 譬如: - shadowFadingTable,- servingSector,- rxBufferForRe userID,- userPriorityProfile,- mcsOneRetrieval等。
- 循环变量应该以 - i、- j、- k等为前缀,如- for i_File = 1:nFiles
 for j_Position = 1:nPositions
 
- 避免仅用最后的字母s(表示单复数)区别两个变量, 例如 - point和- points. 可以用类似- pointArray的形式加以区别。
- 避免使用一个关键字或者特殊意义的字作为变量名 
- 结构体的命名应该以一个大写字母开头,结构体的命名应该是暗示性的,并且不需要包括字段名(fieldname)应采用 - Segment.length,避免用- Segment.SegmentLength
常数
- 命名常数(包括全局变量)应该采用大写字母,用下划线分割单词,如MAX_ITERATIONS,COLOR_RED
- 参数可以以某些通用类型名作为前缀,如COLOR_RED,COLOR_GREEN
草稿变量,含矩阵,结构体,元胞
- 应用范围比较大的变量应该具有有意义的变量名,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用i,j,k,m,n(最好少用i,j,因为他们作为MATLAB中的永久性常量表示虚数单位的)。双精度数的时候常用x,y和z。m表示矩阵,没有m表示标量
- 命名上将cell,struct与MATLAB中最常见的numeric array,即数值矩阵区分开来.
- n用于整数变量, 如- n_File.
- m用于一般的矩阵,如- matrix_channelHFResponse;
- c用于- cell array, 如- cell_temp= cell(1, 4);
- s用于- struct array, 如- stuct_user= struct('field', {});
- matrix,- cell,- stuct后面的- channelHFResponse,- user用来表示有特定含义的中间变量,比如- matrix_channelHFResponse,用来表示计算- channelHFResponse时中间变量。
函数
- 函数名应该采用小写字母,函数名应该是具有意义的,下划线分割单词
 如采用:compute_total_width()避免compwid()
- 前缀get/set应该作为访问对象或者属性的保留前缀,如getobj(.)。
- 前缀compute应该用在计算某些量的函数的地方computespread()。
- 前缀 is应该用在布尔函数的命名的地方,如iscomplete()。
- Find,- initialize类似。
编码及文档注释要求及实例
代码版式
M文件函数说明
function [ 函数输出参数] =  函数名( 函数输入 )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%此处为函数名,如果不是函数文件就取消此行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建人:
        %日  期:
    	%修改人:
    	%日  期:
    	%函数变量及功能的简单描述
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--函数主体
编码设计
本部分说明了M文件编码的设计,包括以下几个方面:垂直间隔,水平间隔,缩进与对齐,注释。
垂直间隔
空行起着分割块或段落的作用,块(段落)之间一般留一个或两个空行。
- 空行使用规则 - 逻辑块之间要留空行
- 结构体定义之间要留空行
- 函数定义体之间要留空行
- 函数体内,完整的控制结构和单独的语句块之间要留空行
- 逻辑上密切相关的语句序列之间不要留空行
 
- 换行注意事项 - 不在一行使用多个语句。唯一的例外是for语句。For语句的初始化,条件和循环都可以在一行中。例如:
for (bcnl_num = 0; bcnl_num < count; bcnl_num++)
 
 
- 不在一行使用多个语句。唯一的例外是for语句。For语句的初始化,条件和循环都可以在一行中。例如:
或者还有switch语句,如果动作很短并且相同的话(后面有详细描述)。If语句并不是例外:执行语句总是另起一行。例如:
    if (bcnl_num > count)          bcnl_num = count;    
- {}与case总是独占一行
水平间隔
- 逗号后面要有空格,但是不要在结构的成员与指针操作符前后有空格。例如:foo.index
- 在 =,&&,+,-,>,<与||前后加上空格,包括:如simpleAverage = (firstTerm + secondTerm) / two;
 1 : nIterations
 
- 另起一行时,后面一行和前面一行中要继续的地方对齐:
weithedPopulation = (doctorWeight * nDoctors) +...
 (layerWeight * nLawyers) + ...
 (chiefWeight * nChiefs);...
 function (param1,param2,...
 param3)
 
长行拆分
一行代码不能超过180个字符。长行拆分时,在逻辑断点处分行。拆分时,运算符放在被拆分行的尾部,而不是新行的首部。拆分后的新行应与被拆分行采用能够表现出逻辑关系的对齐方式。
- 示例: - if (((new_shape.x > left_border) &&
 (new_shape.x < right_border)) &&
 ( (new_shape.y > bottom_border) &&
 (new_shape.y < top_border))) {
 draw(new_shape);
 }
 
代码行及行内空格
- 代码行中不运行出现中文。
- 关键字后要留空格。像const、inline、case等关键字后要留空格,以辨析关键字;像if、fo、do、while、switch等关键字后要留空格再跟左括号(,以突出关键字。
- (若不在一行的开始,应与前面的字符空格。例如,- if、- while、- do-while、- switch、- for语句等控制结构块的- (应与这些关键字语句之间空格。
- ,之后要留空格;若- ;不是一行的结束符,后面也要留空格。
- ?、- :前后都要留空格。
- (、- [向后紧跟,- ]、- ,、- ;、- )向前紧跟,紧跟处不留空格。
- 一元运算符与所作用的操作数之间不要加空格,如!、~、++、&、*等。
- .、- ->这类运算符前后都不要留空格。
缩进与对齐
- 缩进的水平是一个TAB键,可将编辑器的TAB符定义为4个空格。 
- 嵌套块之间使用4个空格(一个TAB键)的缩进方式。 
- 模块和子程序头以及子程序声明从第一列起。 
- 下列情况下缩进一个水平: - 子程序声明
- 条件(看下面)
- 循环的结构
- switch语句
- case labels
 
- 条件的else与if有相同的缩进。因此格式就是: - fid = fopen(fileName);
 if(fid~ = -1)
 statements
 else
 statements
 end
 
- switch语句的一般格式: - switch(condition)
 case ABC
 处理语句;
 case DEF
 处理语句;
 otherwise
 处理语句;
 end
 
- 注释与它们作注释的代码部分有相同的缩进(见Comments)。 
注释
- 程序内部不同功能模块要空一行,同时附注释说明模块的作用、功能。这样程序结构清晰易懂,便于同学间学习交流。 
 例如:- %% 注释说明下模块一的功能
 ...模块一...代码...
 此处为空行
 %% 注释说明下模块二的功能
 ...模块二...代码...
 
- 多层循环嵌套要在每一个结束的end 后加注释说明该层循环结束 
 例:- for %循环1
 for %循环2
 for %循环3
 ......
 代码段
 ......
 end %循环3结束
 end %循环2结束
 
end             %循环1结束
```
- 用于理解一小段代码含义的注释,统一写在代码上方,如 - %(1)初始化
 Number = zeros(1,PNumber); %Number存放每个工件的工序数,PNumber工件个数
 for i = 1:PNumber
 Number(i) = MNumber; %MNumber工序个数
 end
 
- 用于理解一句代码的意思可以写在代码后方,但是注意不能超过180字符。太长可以考虑写在代码上方 - gen = 0; %迭代计数器
 JmNumber = Max_Cell(Jm); %调用Max_Cell子函数求机器的数量
 [PNumber,MNumber] = size(Jm); %PNumber为工件个数,MNumber为工序个数
 trace = zeros(2,MAXGEN); %寻优结果的初始值,一行存放各代的最优解,一行存放各代解的均值
 TotalOP_Number = PNumber*MNumber; %工序总个数
 
- 大段代码,有完整的阶段性的运行结果,需要使用%% 形式,使用单元来注释 - %% 子函数程序13:Find函数
 function Pos = Find(FindVal,S)
 [m,n] = size(S);
 Pos = -1;
 for i = 1:n
 if FindVal == S(i)
 Pos = i;
 break;
 end
 end
 
MATLAB 代码规范的更多相关文章
- iOS代码规范(OC和Swift)
		下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ... 
- 谈谈PHP代码规范
		[转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ... 
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
		对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ... 
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
		类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ... 
- 作业三: 代码规范、代码复审、PSP
		分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ... 
- 转!!Java代码规范、格式化和checkstyle检查配置文档
		为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ... 
- C#代码规范
		C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ... 
- 【转】Java代码规范
		[转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539 
- 作业三:代码规范、代码复审、PSP
		一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ... 
随机推荐
- Educational Codeforces F. Remainder Problem
			[传送门] 题意就是单点加以及查询下标为等差数列位置上的值之和.刚开始看到这道题.我以为一个数的倍数是log级别的.就直接写了发暴力.就T了.还在想为啥,优化了几发才发现不太对劲.然后才想到是$\df ... 
- 开源项目(5-1) yolo万能检测识别
			(1)Windows10+YOLOV3+VisualStudio2017最新版本超详细过程 https://blog.csdn.net/KID_yuan/article/details/8838026 ... 
- [Git] Remove Files from Staging Before Committing
			If you've added files to the staging area (the Index) accidentally - you can remove them using git r ... 
- MongoDB 几种查询嵌套数据(Embedded)的方式(转载)
			前言 MongoDB 推荐使用「内嵌文档(Embedded)」,所以带来一个问题,如何查询嵌入文档内的数据? 假如我们有一个 storage 的 Collection,包含一条数据: // `stor ... 
- Cookie实现购物车功能
			这里的购物车暂时存放书,后期把参数改成Object,把方法抽取成接口,只要实现了接口的Object类都可以放进购物项,这样就实现了购物任何物品 使用购物项因为一个购物项可以包含某种商品的数量,总价等, ... 
- Vue/小程序/小程序云+Node+Mongo开发微信授权、支付和分享
			大家好,我是河畔一角,今天给大家介绍我的第三门实战课程:基于微信开发的H5.小程序和小程序云的授权.支付和分享专项课程. 一.这一次为什么会选择微信支付和分享的课题呢? 金庸的小说中曾提到:有人的地方 ... 
- java字符串格式化性能对比String.format/StringBuilder/+拼接
			String.format由于每次都有生成一个Formatter对象,因此速度会比较慢,在大数据量需要格式化处理的时候,避免使用String.format进行格式化,相反使用StringUtils.l ... 
- Curator框架实现ZooKeeper分布式锁
			排他锁(X) 这里主要讲讲分布式锁中的排他锁.排他锁(Exclusive Locks,简称X锁),又称为写锁或独占锁,是一种基本的锁类型.如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只 ... 
- LiteIDE 设置默认编译输出位置
			go build命令默认输出路径是当前工作路径,这个显得比较乱,我习惯于把输出文件放置在项目的build目录下,这样方便查找,已经同步备份的时候排除不必要的文件. go build命令可以指定-o 输 ... 
- Flume监控指标项
			配置监控 1.修改flume-env.sh export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmx ... 
