代码及其管理规范


1. C 代码基本规范

1.1 命名规范

  • 辞要达意
  • 类型/变量/函数命名
    Linux/unix:蛇形命名法(snake_case)
    Windows:驼峰命名法:CamelCase, camelCase
  • 文件夹/文件命名
    Linux: lowcase,命名简单,尽量用一个单词完成命名.
    Windows:不限,但要言简意概!

1.2 代码缩进 & 空行

  • 代码缩进
    用tab缩进, 将tab键的设置为4个空格,避免出现另一个编辑器打开时格式变乱的情况。

  • 空行


#include <xxxx.h>
#include <yyyy.h>
           -> 头文件与main函数头之间。
main(){
    //1. 功能一实现代码。
    xxxx;
    yyyy;
                ---> 功能模块与功能模块之间。
    //2. 功能二实现代码。
    gggg;
    hhhh;
                ---> 功能模块与return语句之间。
    return 0;    
}

1.3 换行

推荐 linux kernel 代码的换行风格,如下

if...{

}

for (...){

}

1.4 注释

  • 核心代码必须要有注释!!!
  • 注释清晰,明确
  • 行注释& 段注释可自由选择
  • 推荐英文注释
  • 禁止使用拼音注释

2. golang 代码基本规范

2.1 命名规范

  • 辞要达意

  • 类型/变量/函数命名
    驼峰命名法:CamelCase, camelCase

  • 文件夹/包/文件命名
    lowcase,命名简单,文件命名可以使用 蛇形 命名法。包&文件夹尽量用一个单词命名。

2.2 代码缩进 & 空行

  • 代码缩进
    用tab缩进, 将tab键的设置为4个空格,避免出现另一个编辑器打开时格式变乱的情况。

  • 空行

package foo
           -> import与foo包头之间。
import (
....
)
		-> 空行
func foo() int {
    //1. 功能一实现代码。
    xxxx;
    yyyy;
                ---> 功能模块与功能模块之间。
    //2. 功能二实现代码。
    gggg;
    hhhh;
                ---> 功能模块与return语句之间。
    return 0;    
}

2.3 注释

  • 核心代码必须要有注释!!!
  • 注释直白,明确
  • 行注释& 段注释可自由选择
  • 推荐英文注释
  • 禁止使用拼音注释

3. Java 代码基本规范

3.1 命名规范

  • 辞要达意

  • 包名
    全部小写,不使用下划线,采用反域名命名规则"com.advantech.functionname"

  • 类名/类文件名
    UpperCamelCase 风格编写。测试类的命名以 Test 结束。接口类多以 able 或 ible 结尾

  • 资源文件命名
    小写加下划线方式

  • 变量命名
    公有变量按 小驼峰 法命名
    私有非静态成员变量以 m 开头
    私有静态成员变量以 s 开头
    尽量使用 功能/描述 + 类型 的模式 ,如 mNameTextView

public class MyClass {
    // static const
    public static final int SOME_CONSTANT = 42;
    // public variable
    public int publicField;
    // private static variable
    private static MyClass sSingleton;
    // default variable
    int mPackagePrivate;
    // private variable
    private int mPrivate;
}
  • 常量命名
    常量以大写字母和下划线 _ 组成

  • 方法命名
    lowerCamelCase风格编写

  • layout.xml布局文件中的变量命名
    id所在组件_类型_命名 的模式,例如: @+id/main_tv_name@id/chat_btn_send
    所有文本请定义在 strings.xml 中 , 如 @string/app_name

3.2 缩进 & 排版

  • 代码缩进与排版
    按照Android Studio默认的风格标准统一格式化即可

3.3 注释

  • 核心代码必须要有注释!!!
  • 注释清晰,明确
  • 行注释& 段注释可自由选择
  • 推荐英文注释
  • 类注释
    每个类完成后应该有作者,创建时间,描述等注释,可以在Android Studio中设定模板
/**
 * <pre>
 *     author : ${USER}
 *     time   : ${YEAR}/${MONTH}/${DAY}
 *     desc   :
 *     version: 1.0
 * </pre>
 */
}
  • 方法注释
    重要的方法也必须做方法头注释(在方法前一行输入 /** + 回车即可自动生成,只需补充参数描述即可)

4. WEB 代码基本规范

4.1 命名规范

  • 辞要达意

  • 类型/变量/函数命名
    驼峰命名法:CamelCase, camelCase

  • 文件夹/文件命名
    lowcase,命名简单,文件命名可以使用驼峰命名法。文件夹尽量用一个单词命名。

4.2 代码缩进 & 空行

  • 代码缩进
    用tab缩进, 将tab键的设置为4个空格,避免出现另一个编辑器打开时格式变乱的情况。

4.3 注释

  • 核心代码必须要有注释!!!
  • 注释清晰,明确
  • HTML注释<!-- --> JS注释//
  • 推荐英文注释

4.4 代码结构

  • js代码的复用性: 将可复用的功能代码尽量封装成工具类或方法
  • css样式的复用性:将公用的样式声明到global.scss中
  • vue组件的复用性:将可复用的模块封装成公用组件,保存到common目录下

5. 引用代码规范

  • 引用别人代码时,只引用使用部分,不要什么都引用
void * get_io_base(unsigned int address, unsigned int size)
{

	fd = open("/dev/mem", O_RDWR | O_SYNC);  
    if (fd < 0 ) 
			return NULL;

	phy_base =(void *) address;
	map_base = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, address);   

	return 	map_base;
}
....
/*评论1

请发表有价值的评论, 博客评论不欢迎灌水,良好的社区氛围需大家一起维护。
 
表情包
表情包
m0_56400174
m0_56400174
2021.03.27
回复
点赞
兄弟今年过年回家不?
表情包
表情包
m0_56400174
m0_56400174
2021.03.27
回复
点赞
不回,就在这过算了!
*/
  • 不要在你的代码里大放文采
/*
* 今日灵感大发,偶作诗一首
* 老子舞时无须拍,梅花乱插乌巾香,
* 君前作剧莫想笑,我死诸君思此狂。
*/
int foo(){
......
}
  • 减少代码中的冗余代码
//foo.c

void A(){
 printf("helloworld");
}
void B(){
 printf("helloworld");
}

//bar.c
void A(){
 printf("helloworld");
}
void B(){
 printf("helloworld");
}

既然代码能共用,就把它封装成一个共用的代码!不要在那里都能,看见 它被相同的定义!

  • 你的代码就是你的作品!

eg. Code is art 的故事


6. git 代码管理规范

6.1 建议新人使用pull-request 机制提交代码

6.2 学会使用github,将会对你有很大的益处

6.3 git 提交代码尽量原子化

A 功能完成后,就提交A功能, 不要在B,C,D 同时完成后,再做一次提交,这样非常不利于维护!

6.4 git 提交只提交更改的代码

通常,git 提交只提交更改的源码内容,不要将中间文件也给提交了。
建议使用.gitignore 去过滤提交。

6.5 git commit title 要言简而意赅,直白明了

6.6 git commit message 一定要交待清楚你改了什么

commit 78764287c7c17d3862c3c11a7575020b47c4ea11 (HEAD -> master, origin/master, origin/HEAD)
Author: xyz <xxxx@sina.com.cn>
Date:   Fri Mar 25 19:08:08 2022 +0800

   Add some update

some update 是什么?不免让后来的维护者发难!

在这里你可以长篇大论你修改的问题,目的就是说清楚你为什么改它!

commit 8fb049834bff5edfd15d62bee9bda333c2ddfcee
Author: Sandor Yu <Sandor.yu@nxp.com>
Date:   Thu Dec 3 21:27:37 2020 +0800

    MLK-25101: drm: imx: dw_hdmi: Keep hdmi phy in poweron status
    
    The pixel clock of display controller lcdifv3 source from hdmi phy.
    When hdmi cable plugout irq trigger,
    hdmi phy will be poweroff immediately in hdmi controller driver.
    But DRM and user app may still working until they received plugout event.
    For such case, the kernel will dump.
    
    [   89.707045] ------------[ cut here ]------------
    [   89.711705] [CRTC:39:crtc-2] vblank wait timed out
    [   89.716563] WARNING: CPU: 2 PID: 7 at drivers/gpu/drm/drm_atomic_helper.c:1467 drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
    [   89.728472] Modules linked in:
    [   89.731533] CPU: 2 PID: 7 Comm: kworker/u8:0 Not tainted 5.4.70-00041-g631cb8d6e2b2-dirty #23
    [   89.740055] Hardware name: NXP i.MX8MPlus EVK board (DT)
    [Playing (No Repeated)][Vol=1.0][   89.745372] Workqueue: events_unbound commit_work
    [00:00:04/00:02:18][   89.752939] pstate: 40000005 (nZcv daif -PAN -UAO)
    [   89.759376] pc : drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
    [   89.765905] lr : drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
    [   89.772431] sp : ffff800011c43ca0
    [   89.775744] x29: ffff800011c43ca0 x28: 0000000000000000
    [   89.781054] x27: 000000000000055f x26: 0000000000000070
    [   89.786363] x25: ffff00017786b800 x24: 0000000000000001
    [   89.791674] x23: 0000000000000038 x22: 0000000000000004
    [   89.796983] x21: ffff00016a375400 x20: ffff00017786b088
    [   89.802293] x19: 0000000000000002 x18: 0000000000000010
    [   89.807604] x17: 0000000000000000 x16: 0000000000000000
    [   89.812913] x15: ffff0001760c5870 x14: ffffffffffffffff
    [   89.818225] x13: ffff800091c439f7 x12: ffff800011c439ff
    [   89.823537] x11: ffff800011a11000 x10: ffff800011b36328
    [   89.828847] x9 : 0000000000000000 x8 : ffff800011b37000
    [   89.834158] x7 : ffff80001069fc68 x6 : 0000000000000341
    [   89.839469] x5 : 0000000000000000 x4 : ffff00017f3a0188
    [   89.844778] x3 : ffff00017f3a6f20 x2 : ffff00017f3a0188
    [   89.850088] x1 : 4d8823010d259700 x0 : 0000000000000000
    [   89.855404] Call trace:
    [   89.857854]  drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
    [   89.864033]  drm_atomic_helper_wait_for_vblanks+0x14/0x20
    [   89.869433]  lcdifv3_drm_atomic_commit_tail+0x64/0x7c
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值