我们先来看看比较完整的合约
pragma solidity ^0.4.14;
contract Counter {
// 定义一个状态变量count 赋值为0;
uint count = 0;
// 声明一个地址类型的状态变量owner;
address owner;
//
function Counter() {
// 构造函数,给状态变量owner赋值
owner = msg.sender;
}
function increment() public {
// 声明一个局部变量 step 赋值为10;
uint step = 10;
if (owner == msg.sender) {
count = count + step;
}
}
function getCount() constant returns (uint) {
return count;
}
function kill() {
if (owner == msg.sender) {
// 析构函数,销毁合约,只有合约持有者调用这个方法才会进这个if语句
selfdestruct(owner);
}
}
}
contract是合约声明的关键字,Counter是合约名字
contract相当于其他语言中的class,Counter相当于类名
count和owner就是状态变量,合约中的状态变量相当于类中的属性变量,
构造函数(Contructor)
function Counter()函数名和合约名相同时,此函数是合约的构造函数,当合约对象创建时,会先调用构造函数对相关数据进行初始化处理。
成员函数
- function increment() public
- function getCount() constant returns (uint)
- function kill()
都是Counter合约的成员函数,
局部变量
上个合约代码中的 step 变量为局部变量,局部变量只在离它最近的{}内容使用,函数执行完后会销毁。
状态变量
在这里我们也可以叫做成员属性,比如我们js中一个对象有属性和方法。上面合约代码中的 count 和 owner 即为状态变量
析构函数(selfdestruct)
析构函数和构造函数对应,构造函数是初始化数据,而析构函数是销毁数据。在counter合约中,当我们手动调用kill函数时,就会调用selfdestruct(owner)销毁当前合约。