标识符命名原则

标识符的名字应当直观,其长度应当符合“最小长度,最大信息量”原则

非矩阵变量

  • 变量名应该以小写字母开头的大小写混合形式 譬如:shadowFadingTableservingSectorrxBufferForRe userIDuserPriorityProfilemcsOneRetrieval等。

  • 循环变量应该以 ijk 等为前缀,如

    1. for i_File = 1nFiles
    2. for j_Position = 1nPositions
  • 避免仅用最后的字母s(表示单复数)区别两个变量, 例如pointpoints. 可以用类似pointArray的形式加以区别。

  • 避免使用一个关键字或者特殊意义的字作为变量名

  • 结构体的命名应该以一个大写字母开头,结构体的命名应该是暗示性的,并且不需要包括字段名(fieldname)应采用Segment.length,避免用Segment.SegmentLength

常数

  • 命名常数(包括全局变量)应该采用大写字母,用下划线分割单词,如MAX_ITERATIONSCOLOR_RED
  • 参数可以以某些通用类型名作为前缀,如COLOR_REDCOLOR_GREEN

草稿变量,含矩阵,结构体,元胞

  • 应用范围比较大的变量应该具有有意义的变量名,作为“草稿变量”的的临时存储空间或者索引可以用短名字。程序员在读到这样的变量的时候,可以假定这个变量的值在没有几行之后的代码中就不会再用到。通常的“草稿变量”整数的时候用 ijkmn(最好少用i,j,因为他们作为MATLAB中的永久性常量表示虚数单位的)。双精度数的时候常用 xyzm 表示矩阵,没有 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', {}) ;
  • matrixcellstuct后面的channelHFResponseuser用来表示有特定含义的中间变量,比如matrix_channelHFResponse,用来表示计算channelHFResponse时中间变量。

函数

  • 函数名应该采用小写字母,函数名应该是具有意义的,下划线分割单词

    如采用: compute_total_width()避免compwid()
  • 前缀get/set 应该作为访问对象或者属性的保留前缀,如getobj(.)
  • 前缀compute应该用在计算某些量的函数的地方computespread()
  • 前缀 is应该用在布尔函数的命名的地方,如 iscomplete()
  • Findinitialize类似。

编码及文档注释要求及实例

代码版式

M文件函数说明

  1. function [ 函数输出参数] = 函数名( 函数输入 )
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. %此处为函数名,如果不是函数文件就取消此行
  4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. %创建人:
  6. %日 期:
  7. %修改人:
  8. %日 期:
  9. %函数变量及功能的简单描述
  10. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  11. --函数主体

编码设计

本部分说明了M文件编码的设计,包括以下几个方面:垂直间隔,水平间隔,缩进与对齐,注释。

垂直间隔

空行起着分割块或段落的作用,块(段落)之间一般留一个或两个空行。

  • 空行使用规则

    • 逻辑块之间要留空行
    • 结构体定义之间要留空行
    • 函数定义体之间要留空行
    • 函数体内,完整的控制结构和单独的语句块之间要留空行
    • 逻辑上密切相关的语句序列之间不要留空行
  • 换行注意事项

    • 不在一行使用多个语句。唯一的例外是for语句。For语句的初始化,条件和循环都可以在一行中。例如:
      1. for (bcnl_num = 0; bcnl_num < count; bcnl_num++)

或者还有switch语句,如果动作很短并且相同的话(后面有详细描述)。If语句并不是例外:执行语句总是另起一行。例如:

if (bcnl_num > count) bcnl_num = count;

  • {}与case总是独占一行
水平间隔
  • 逗号后面要有空格,但是不要在结构的成员与指针操作符前后有空格。例如:foo.index
  • =&&+->, <|| 前后加上空格,包括
    1. simpleAverage = (firstTerm + secondTerm) / two;
    2. 1 : nIterations
  • 另起一行时,后面一行和前面一行中要继续的地方对齐:
    1. weithedPopulation = (doctorWeight * nDoctors) +...
    2. (layerWeight * nLawyers) + ...
    3. (chiefWeight * nChiefs);...
    4. function (param1param2,...
    5. param3)
长行拆分

一行代码不能超过180个字符。长行拆分时,在逻辑断点处分行。拆分时,运算符放在被拆分行的尾部,而不是新行的首部。拆分后的新行应与被拆分行采用能够表现出逻辑关系的对齐方式。

  • 示例:

    1. if (((new_shape.x > left_border) &&
    2. (new_shape.x < right_border)) &&
    3. ( (new_shape.y > bottom_border) &&
    4. (new_shape.y < top_border))) {
    5. draw(new_shape);
    6. }
代码行及行内空格
  • 代码行中不运行出现中文。
  • 关键字后要留空格。像constinlinecase等关键字后要留空格,以辨析关键字;像iffodowhileswitch等关键字后要留空格再跟左括号,以突出关键字。
  • 若不在一行的开始,应与前面的字符空格。例如,ifwhiledo-whileswitchfor语句等控制结构块的应与这些关键字语句之间空格。
  • ,之后要留空格;若不是一行的结束符,后面也要留空格。
  • 前后都要留空格。
  • [向后紧跟,]向前紧跟,紧跟处不留空格。
  • 一元运算符与所作用的操作数之间不要加空格,如++&*等。
  • .->这类运算符前后都不要留空格。
缩进与对齐
  • 缩进的水平是一个TAB键,可将编辑器的TAB符定义为4个空格。

  • 嵌套块之间使用4个空格(一个TAB键)的缩进方式。

  • 模块和子程序头以及子程序声明从第一列起。

  • 下列情况下缩进一个水平:

    • 子程序声明
    • 条件(看下面)
    • 循环的结构
    • switch语句
    • case labels
  • 条件的else与if有相同的缩进。因此格式就是:

    1. fid = fopenfileName);
    2. iffid~ = -1
    3. statements
    4. else
    5. statements
    6. end
  • switch语句的一般格式:

    1. switchcondition
    2. case ABC
    3. 处理语句;
    4. case DEF
    5. 处理语句;
    6. otherwise
    7. 处理语句;
    8. end
  • 注释与它们作注释的代码部分有相同的缩进(见Comments)。

注释
  • 程序内部不同功能模块要空一行,同时附注释说明模块的作用、功能。这样程序结构清晰易懂,便于同学间学习交流。

    例如:

    1. %% 注释说明下模块一的功能
    2. ...模块一...代码...
    3. 此处为空行
    4. %% 注释说明下模块二的功能
    5. ...模块二...代码...
  • 多层循环嵌套要在每一个结束的end 后加注释说明该层循环结束

    例:

    1. for %循环1
    2. for %循环2
    3. for %循环3
    4. ......
    5. 代码段
    6. ......
    7. end %循环3结束
    8. end %循环2结束

end %循环1结束

```

  • 用于理解一小段代码含义的注释,统一写在代码上方,如

    1. %(1)初始化
    2. Number = zeros(1,PNumber); %Number存放每个工件的工序数,PNumber工件个数
    3. for i = 1:PNumber
    4. Number(i) = MNumber; %MNumber工序个数
    5. end
  • 用于理解一句代码的意思可以写在代码后方,但是注意不能超过180字符。太长可以考虑写在代码上方

    1. gen = 0; %迭代计数器
    2. JmNumber = Max_Cell(Jm); %调用Max_Cell子函数求机器的数量
    3. [PNumber,MNumber] = size(Jm); %PNumber为工件个数,MNumber为工序个数
    4. trace = zeros(2,MAXGEN); %寻优结果的初始值,一行存放各代的最优解,一行存放各代解的均值
    5. TotalOP_Number = PNumber*MNumber; %工序总个数
  • 大段代码,有完整的阶段性的运行结果,需要使用%% 形式,使用单元来注释

    1. %% 子函数程序13Find函数
    2. function Pos = Find(FindVal,S)
    3. [m,n] = size(S);
    4. Pos = -1;
    5. for i = 1:n
    6. if FindVal == S(i)
    7. Pos = i;
    8. break;
    9. end
    10. end

MATLAB 代码规范的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  3. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  4. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

  5. 作业三: 代码规范、代码复审、PSP

    分) 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能 ...

  6. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  7. C#代码规范

    C#代码规范  一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...

  8. 【转】Java代码规范

    [转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539

  9. 作业三:代码规范、代码复审、PSP

    一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...

随机推荐

  1. flutter中的异步机制Future

    饿补一下Flutter中Http请求的异步操作. Dart是一个单线程语言,可以理解成物理线路中的串联,当其遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞,用户就会感觉到 ...

  2. MongoDB主从

    环境示例: 系统:Centos6.6x64 安装目录:/opt/ 主:172.16.15.101 从:172.16.15.102 1.下载安装: # wget https://fastdl.mongo ...

  3. 50: Luogu P4568 分层图

    分层图最短路模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <cti ...

  4. P1501 [国家集训队]Tree II LCT

    链接 luogu 思路 简单题 代码 #include <bits/stdc++.h> #define ls c[x][0] #define rs c[x][1] using namesp ...

  5. KVM系统镜像制作

    使用virt-install创建虚拟机并安装GuestOS virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvirt API的hypervisor创建虚拟机并完成Gue ...

  6. Xilinx ISE中使用Synplify综合报错的原因之二

    今天发现,不同的器件型号下由IP core生成的模块有时不通用,在实现(implementation)时会出现translate错误.

  7. mac 以多tab的方式打开

    让mac 始终以多tab的方式打开程序 背景: 开发中始终需要多个 项目 的方式进行处理, 但一直使用 `command + `` 的方式总是比较烦人, 有没有一个比较好的视图方式呢; 即我想在一个窗 ...

  8. modis数据处理的坑(MOD02,mod03,mod04,MCD19A2)

    一直以来处理modis产品都是用的 modis conversion toolkit(MCTK),用 IDL 来跑感觉好像也没什么问题,好像并没有去验证结果到底对不对,因为用的气溶胶数据 MOD04_ ...

  9. Linux下查看文件和文件夹大小 删除日志

    场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...

  10. 拷贝Maven依赖jar包到指定目录

    一.导出到默认目录 targed/dependency 从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: 1 mvn dependency:copy-de ...