solidity编码规范

命名规范

文件、合约、库、事件、枚举及结构体命名

当文件里只包含一个合约时,文件命名应该与合约命名相同。
当文件里包含不只一个合约时,文件命名应该根据项目内容合理命名。

合约、库、事件及结构体命名应该使用单词首字母大写的方式,这个方式也称为:驼峰式命名法,比如: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 {
      ...
  }

函数之间应该有空行,例如:
solidity编码规范_第1张图片

左括号应该跟定义在一行

定义包括合约定义、函数定义、库定义、结构体定义等等,例如推荐使用:
solidity编码规范_第2张图片
不推荐使用:
solidity编码规范_第3张图片

左括号应该跟条件控制在一行

在使用if, else, while, for 时

  • 左花括号和声明同一行

  • 右括号和左括号声明保持相同缩进位置。

  • 左括号后应回车

此外,if、while、for条件语句之间必须空行

推荐的写法是:
solidity编码规范_第4张图片
不推荐使用:
solidity编码规范_第5张图片
如果控制语句内只有一行,括号可省略,如:

但像下面一个语句有多方就不能省略,如:
solidity编码规范_第6张图片

表达式内的空格

一个单行的表达里,在小括号、中括号、大括号里应该避免不必要的空格

例如推荐使用:

有一种例外是,结尾的括号跟在结束的分号后面, 应该加一个空格,例如:

分号”;”前不应该有空格,例如:

而不是:

不要为对齐添加不必要的空格,例如推荐使用:

而不是:

控制每一行长度

每行不应该太长,最好在80(或160)个字符以内,函数的参数应该是单独的行,且只有一个缩进,例如推荐的方式是:
solidity编码规范_第7张图片
而不是:
solidity编码规范_第8张图片
对应的赋值语句应该是这样写:
solidity编码规范_第9张图片
而不是:

文件编码格式

推荐使用utf-8编码

引入文件

一般在代码开始进行引入声明

建议使用:
solidity编码规范_第10张图片
而不是:
solidity编码规范_第11张图片

函数编写规范

函数的顺序

在编写函数的时候,应该让大家容易找到构造函数,回退函数,官方推荐的的函数顺序是:

  • 构造函数

  • 回退函数 (如果有)

  • 外部函数(external)

  • 公有函数(public)

  • 内部函数(internal)

  • 私有函数(private)

  • 同一类函数时,constant函数放在后面

例如:
solidity编码规范_第12张图片
而不是下面的函数顺序:
solidity编码规范_第13张图片

明确函数的可见性

所有的函数(包括构造函数)应该在定义的时候明确函数的可见性,例如应该使用:

而不是

可见性应该在修饰符前面

函数的可见性应该写在自定义的函数修饰符前面,例如:

而不是

变量声明

  • 对于数组变量声明,类型和数组中括号直接不能有空格。

    规范的方式:
    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

你可能感兴趣的:(solidity)