《GitHub精选》是我们分享Github中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个谷歌代码风格指南项目——styleguide。
严谨的代码风格能够给人良好的印象和更佳的易读性,在实际的开发中,经常会遇到这样一种情况,明明是自己的代码,过了一段时间就完全不认识了。所以,对于初学者来说,必须要建立良好的编程习惯,这其中就包括代码风格,例如,首行缩进、关键词之后加空格、驼峰命名法等等,由谷歌开源的项目styleguide提供了包括C++、C#、JAVA、Python等数10种编程语言的代码风格,大家参考模仿就能轻松写出高质量的代码。
示例:
头文件
所有头文件都应该有#define保护以防止多次包含,为了保证唯一性,它们应该基于项目源代码树中的完整路径
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_
命名规则
使用描述对象目的或意图的名称
class MyClass {
public:
int CountFooErrors(const std::vector<Foo>& foos) {
int n = 0; // 给定有限的范围和上下文
for (const auto& foo : foos) {
...
++n;
}
return n;
}
void DoSomethingImportant() {
std::string fqdn = ...; // 众所周知的完全限定域名的缩写
}
private:
const int kMaxAllowedConnections = ...; // 在上下文中明确含义
};
函数声明和定义
返回类型与函数名在同一行,参数尽量在同一行
ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) {
DoSomething();
...
}
参数太多可以换行
ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
Type par_name1, // 4 个空格缩进
Type par_name2,
Type par_name3) {
DoSomething(); // 2 个空格缩进
...
}
包名
包名都是小写的,连续的单词简单地连接在一起(没有下划线)
正确:com.example.deepspace
错误:com.example.deepSpace或 com.example.deep_space
类名
类名用大驼峰命名法,通常是名词或名词短语
Character或 ImmutableList
测试类的命名以它们正在测试的类的名称开头
HashTest或 HashIntegrationTest
方法名
方法名用小驼峰命名法,通常是动词或动词短语
sendMessage或 stop
局部变量声明
局部变量通常不会在其包含块或类块构造的开始处声明;
每个局部变量声明只声明一个变量,不使用let a = 1, b = 2;此类的声明
属性注释
必须记录属性类型,如果代码提供了足够的说明文档,则可以省略私有属性的描述
/** My class. */
class MyClass {
/** @param {string=} someString */
constructor(someString = 'default string') {
/** @private @const {string} */
this.someString_ = someString;
}
}
其他:
GitHub: https://github.com/google/styleguide