代码是软件开发过程的产物,代码的作用是通过编译器编译后运行,达到预期的效果(功能、稳定性、安全性等等),而另外一个重要作用是给人阅读。对于机器来说只要代码正确就能够正确的运行程序,但是人不同,如果代码编写混乱就会对代码阅读造成障碍,导致代码无法维护,甚至会导致代码重构等高成本活动,所以规范代码势在必行。
本文从以下几个方面介绍代码规范以及相关工具。
.Net代码规范简介
文章开始提到过代码是给人看的,代码规范的目的在于创建一个统一的规范来保持代码的整洁,这样有利于提高代码的可维护性,但除此之外还可以将一些代码的最佳实践也作为规范的一部分,这样还可以提高代码的性能和安全性。
一般来说.Net的代码规范主要有:代码格式规范、代码使用规范,前者保证代码可读性后者保证代码执行效率和安全性。
代码格式规范主要的目的是统一代码编写格式,避免开发人员独特的代码编写方式,以便于项目的所有开发人员能快速的阅读其他人员开发的代码,代码格式规范主要有以下几个方面:
注:除以下规范外,对于一个工程来说应该还有工程结构规范(也可以理解为代码目录结构规范),工程结构规范可能因项目不同而不同,但是统一规范可以提高代码查找效率和开发效率(团队新成员不会再疑惑代码应该放哪里)。
命名规范命名规范主要涉及命名空间、类型、接口、属性、方法、变量等相关命名,其主要规范有:
使用Pascal(单词首字母大写)命名方式对命名空间、类型、枚举类型、枚举值、事件、属性、方法、常量进行命名。
例:public class PersonManager {}
使用Camel()命名方式对参数、变量、字段进行命名。
例:private string userName;
禁止使用缩写,除URL、IO等能达成共识的缩写除外,使用缩写可全大写。
例:System.IO;
接口以I做为前缀进行命名。
例:public interface IConvertor {}
抽象类以Abstract为前缀或者以Base为后缀进行命名。
例:public abstract class PersonBase {}
异常类型以Exception为后缀。
例:public class CustomException {}
在对任何东西命名时需要使用有意义的名称,并且保证单词拼写正确以及语法正确,避免使用拼音(地名等通用拼音除外)。
例: public string Name {get; set;}
反例: public string N {get; set;}
布局规范的目的是使代码变得整洁,提高代码可读性,其主要规范有:
代码缩进为4个空格。
左右花括号必须独自一行,括号内容为空时除外:
例:public void WriteLog(string log)
{
Console.WriteLine(log);
}
public void EmptyMethod(string log) {}
括号的使用:
if/for/while/do等关键字后面与左括号直接需要加空格:
if (x == 1)
运算符左右需要加空格:
a = c + b;
单行代码限制120个字符,超长处理方式:
第二行相对第一行缩进4个空格,从第三行开始无需缩进。
运算符及方法调用的“.”需要跟随换行,但逗号不需要。
例:WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
App.Method(a
+ b,
c);
注释用来对编写的代码进行说明,包括功能说明以及实现说明,这样可以大大的提高程序的可读性,另外规范的注释还可以通过工具来生成相应的API文档,C#的注释规范有以下几种:
类注释
例:/// <summary>
/// This is a Entity Class for Post.
/// </summary>
public class Post
属性及方法注释:
/// <summary>
/// Get post with id
/// </summary>
/// <param>post's identity</param>
/// <returns>post instance</returns>
public Post GetPostById(int id)
代码单行注释:
//this is a single line comment
代码多行注释:
/*
this is comment1
this is comment2
*/
代码的使用规范,或者说是代码编写的最佳“实践”(当然优良的格式规范也是一种最佳实践),它们是根据代码的实现/运行原理以及特定的应用场景进行实践的最佳方案,这些方案的使用除了可以提高代码的可读行外,还可以减少程序Bug、提高程序性能及安全性,如以下几个方面:
使用语言特性