一,變量初始值
在solidity中,聲明但沒賦值的變量都有它的初始值或默認(rèn)值。這一講,我們將介紹常用變量的初始值。
1.值的初始值
bool public _bool; // false
string public _string; // ""
int public _int; // 0
uint public _uint; // 0
address public _address; // 0x0000000000000000000000000000000000000000(共44位)
enum ActionSet { Buy, Hold, Sell}
ActionSet public _enum; // 第一個元素 0
function fi() internal{} // internal空白方程
function fe() external{} // external空白方程
2.引用類型初始值
映射mapping:所有元素都為其默認(rèn)值mapping
結(jié)構(gòu)體struct:所有成員都默認(rèn)設(shè)為對應(yīng)默認(rèn)值結(jié)構(gòu)體
數(shù)組array:動態(tài)數(shù)組[];靜態(tài)數(shù)組[定長]所有成員都默認(rèn)設(shè)為對應(yīng)默認(rèn)值數(shù)組
我可以使用public中的getter函數(shù)驗證初始值是否正確:
uint[8] public _staticArray; // 所有成員設(shè)為其默認(rèn)值的靜態(tài)數(shù)組[0,0,0,0,0,0,0,0]
uint[] public _dynamicArray; // `[]`
mapping(uint => address) public _mapping; // 所有元素都為其默認(rèn)值的mapping
// 所有成員設(shè)為其默認(rèn)值的結(jié)構(gòu)體 0, 0
struct Student{
uint256 id;
uint256 score;
}
Student public student;
delete會使變量變?yōu)槌跏贾?/p>
bool public _bool2 = true;
function d() external {
delete _bool2; // delete 會讓_bool2變?yōu)槟J(rèn)值,false
}
?二,常數(shù)
這就繞不開solidity中的兩個關(guān)鍵字,constent(常量)和immutable(不變量),狀態(tài)變量聲明這個兩個關(guān)鍵字之后,不能在合約后更改數(shù)值;并且還可以節(jié)省gas。另外,只有數(shù)值變量可以聲明constent和immutable;string和bytes可以聲明constent,但immutable卻不可以聲明。
constent
constent變量必須在聲明的時候初始化,之后再也不能改變。嘗試改變的話,編譯不通過。
// constant變量必須在聲明的時候初始化,之后不能改變
uint256 constant CONSTANT_NUM = 10;
string constant CONSTANT_STRING = "0xAA";
bytes constant CONSTANT_BYTES = "WTF";
address constant CONSTANT_ADDRESS = 0x0000000000000000000000000000000000000000;
immutable
immutable變量可以在聲明時或構(gòu)造函數(shù)中初始化,因此更加靈活。
uint256 public immutable IMMUTABLE_NUM = 9999999999;
address public immutable IMMUTABLE_ADDRESS;
uint256 public immutable IMMUTABLE_BLOCK;
uint256 public immutable IMMUTABLE_TEST;
你可以使用全局變量例如address(this)
,block.number
?,或者自定義的函數(shù)給immutable
變量初始化。在下面這個例子,我們利用了test()
函數(shù)給IMMUTABLE_TEST
初始化為9
:文章來源:http://www.zghlxwxcb.cn/news/detail-853633.html
// 利用constructor初始化immutable變量,因此可以利用
constructor(){
IMMUTABLE_ADDRESS = address(this);
IMMUTABLE_BLOCK = block.number;
IMMUTABLE_TEST = test();
}
function test() public pure returns(uint256){
uint256 what = 9;
return(what);
}
讓不應(yīng)該變的變量保持不變。這樣的做法能在節(jié)省gas的同時提升合約的安全性。文章來源地址http://www.zghlxwxcb.cn/news/detail-853633.html
到了這里,關(guān)于solidity第七課——變量初始值和常數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!