每一门语言都有其相应的编码规范, Solidity 也一样, 下面官方推荐的规范及我的总结,供大家参考,希望可以帮助大家写出更好规范的智能合约。
## 命名规范
### 避免使用
小写的l,大写的I,大写的O 应该避免在命名中单独出现,因为很容易产生混淆。
### 合约、库、事件、枚举及结构体命名
合约、库、事件及结构体命名应该使用单词首字母大写的方式,这个方式也称为:帕斯卡命名法或大驼峰式命名法,比如:SimpleToken, SmartBank, CertificateHashRepository,Player。
### 函数、参数、变量及修饰器
函数、参数、变量及修饰器应该使用首单词小写后面单词大写的方式,这个方式也称为:(小)驼峰式命名法,是一种混合大小写的方式,如:
* 函数名应该如:getBalance,transfer,verifyOwner,addMember。
* 参数和变量应该如:initialSupply,senderAddress,account,isPreSale。
* 修饰器应该如:onlyAfter,onlyOwner。
## 代码格式相关
### 缩进
使用空格(spaces)而不是Tab, 缩进应该是4个空格
### 空行
合约之间应该有空行,例如:
```js
contract A {
...
}
contract B {
...
}
contract C {
...
}
```
而不是使用:
```js
contract A {
...
}
contract B {
...
}
contract C {
...
}
```
* 函数之间应该有空行,例如:
```js
contract A {
function spam() public {
...
}
function ham() public {
...
}
}
```
没有实现的话,空行可以省去,如:
```js
contract A {
function spam() public;
function ham() public;
}
```
而不是:
```js
contract A {
function spam() public {
...
}
function ham() public {
...
}
}
```
### 左括号应该跟定义在一行
定义包括合约定义、函数定义、库定义、结构体定义等等,例如推荐使用:
```js
contract Coin {
struct Bank {
address owner;
uint balance;
}
}
```
而不是:
```js
contract Coin
{
struct Bank {
address owner;
uint balance;
}
}
```
### 左括号应该跟条件控制在一行
在使用if, else, while, for 时,推荐的写法是:
```js
if (...) {
...
}
for (...) {
...
}
```
而不是:
```js
if (...)
{
...
}
while(...){
}
for (...) {
...;}
```
如果控制语句内只有一行,括号可省略,如:
```js
if (x 智能合约最佳实践 之 Solidity 编码规范
原文地址:http://blog.51cto.com/13457438/2114948