当文件里只包含一个合约时,文件命名应该与合约命名相同。
当文件里包含不只一个合约时,文件命名应该根据项目内容合理命名。
合约、库、事件及结构体命名应该使用单词首字母大写的方式,这个方式也称为:驼峰式命名法,比如:SimpleToken, SmartBank, CertificateHashRepository,Player。
函数、参数、变量及修饰器应该使用首单词小写后面单词大写的方式,这个方式也称为:驼峰式命名法,是一种混合大小写的方式,如:
函数名应该如:getBalance,transfer,verifyOwner,addMember。
参数和变量应该如:initialSupply,senderAddress,account,isPreSale。
修饰器应该如:onlyAfter,onlyOwner。
在方法、变量或者机构体等每行使用0、2或者4个空格缩进
在tab或空格的选择中,空格是首选缩进方式,禁止tab和空格混合使用。
回车(空行)
不同的功能块之间应该用空格隔开,例如公共变量与方法之间,方法与方法之间等,且不允许使用连续的空行。(只能用一个空行,不同的代码块或者功能应使用注释加空行)
合约之间应该有空行,例如:
contract A {
...
}
contract B {
...
}
contract C {
...
}
而不是使用:
contract A {
...
}contract B {
...
}
contract C {
...
}
定义包括合约定义、函数定义、库定义、结构体定义等等,例如推荐使用:
不推荐使用:
在使用if, else, while, for 时
左花括号和声明同一行
右括号和左括号声明保持相同缩进位置。
左括号后应回车
此外,if、while、for条件语句之间必须空行
推荐的写法是:
不推荐使用:
如果控制语句内只有一行,括号可省略,如:
但像下面一个语句有多方就不能省略,如:
一个单行的表达里,在小括号、中括号、大括号里应该避免不必要的空格
例如推荐使用:
有一种例外是,结尾的括号跟在结束的分号后面, 应该加一个空格,例如:
分号”;”前不应该有空格,例如:
而不是:
不要为对齐添加不必要的空格,例如推荐使用:
而不是:
每行不应该太长,最好在80(或160)个字符以内,函数的参数应该是单独的行,且只有一个缩进,例如推荐的方式是:
而不是:
对应的赋值语句应该是这样写:
而不是:
推荐使用utf-8编码
一般在代码开始进行引入声明
在编写函数的时候,应该让大家容易找到构造函数,回退函数,官方推荐的的函数顺序是:
构造函数
回退函数 (如果有)
外部函数(external)
公有函数(public)
内部函数(internal)
私有函数(private)
同一类函数时,constant函数放在后面
所有的函数(包括构造函数)应该在定义的时候明确函数的可见性,例如应该使用:
而不是
对于数组变量声明,类型和数组中括号直接不能有空格。
规范的方式:
uint[5] T = [1,2,3,4,5];
不规范的方式:
uint [5] T = [1,2,3,4,5];
赋值运算符与变量和表达式之间要有一个空格
规范的方式:
x = 3;
x = 100 / 10;
x += 3 + 4;
x |= y && z;
不规范的方式:
x=3;
x = 100/10;
x += 3+4;
x |= y&&z;
为了显示优先级,优先级运算符和低优先级运算符之间要有空格,这也是为了提升复杂声明的可读性。对于运算符两侧的空格数目必须保持一致。
规范的方式:
x = 2**3 + 5;
x = 2***y + 3*z;
x = (a+b) * (a-**b);
不规范的方式:
x = 2** 3 + 5;
x = y+z;
x +=1;
Solidity style-guide