我們先來(lái)看看比較完整的合約
pragma solidity ^0.4.14;
contract Counter {
// 定義一個(gè)狀態(tài)變量count 賦值為0喉悴;
uint count = 0;
// 聲明一個(gè)地址類型的狀態(tài)變量owner棱貌;
address owner;
//
function Counter() {
// 構(gòu)造函數(shù),給狀態(tài)變量owner賦值
owner = msg.sender;
}
function increment() public {
// 聲明一個(gè)局部變量 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) {
// 析構(gòu)函數(shù)婚脱,銷毀合約,只有合約持有者調(diào)用這個(gè)方法才會(huì)進(jìn)這個(gè)if語(yǔ)句
selfdestruct(owner);
}
}
}
contract是合約聲明的關(guān)鍵字勺像,Counter是合約名字
contract相當(dāng)于其他語(yǔ)言中的class障贸,Counter相當(dāng)于類名
count和owner就是狀態(tài)變量,合約中的狀態(tài)變量相當(dāng)于類中的屬性變量吟宦,
構(gòu)造函數(shù)(Contructor)
function Counter()函數(shù)名和合約名相同時(shí)篮洁,此函數(shù)是合約的構(gòu)造函數(shù),當(dāng)合約對(duì)象創(chuàng)建時(shí)殃姓,會(huì)先調(diào)用構(gòu)造函數(shù)對(duì)相關(guān)數(shù)據(jù)進(jìn)行初始化處理袁波。
成員函數(shù)
- function increment() public
- function getCount() constant returns (uint)
- function kill()
都是Counter合約的成員函數(shù),
局部變量
上個(gè)合約代碼中的 step 變量為局部變量辰狡,局部變量只在離它最近的{}內(nèi)容使用锋叨,函數(shù)執(zhí)行完后會(huì)銷毀。
狀態(tài)變量
在這里我們也可以叫做成員屬性宛篇,比如我們js中一個(gè)對(duì)象有屬性和方法娃磺。上面合約代碼中的 count 和 owner 即為狀態(tài)變量
析構(gòu)函數(shù)(selfdestruct)
析構(gòu)函數(shù)和構(gòu)造函數(shù)對(duì)應(yīng),構(gòu)造函數(shù)是初始化數(shù)據(jù)叫倍,而析構(gòu)函數(shù)是銷毀數(shù)據(jù)偷卧。在counter合約中豺瘤,當(dāng)我們手動(dòng)調(diào)用kill函數(shù)時(shí),就會(huì)調(diào)用selfdestruct(owner)銷毀當(dāng)前合約听诸。