メインコンテンツまでスキップ

Constant

コントラクトの定数について学習します

定数はコントラクトデプロイ後は一切変更できない値です

変数はストレージ領域に保存されますが、定数はコンパイルされたバイトコードに直接埋め込まれます

constructor

コンストラクタとは、コントラクトのデプロイ時にのみ実行される関数

ストレージに記録する変数はデプロイ時は型のデフォルト値が格納されるが、それにたいして特定の値を代入するために用いられる

コンストラクタを省略することも可能、その場合は何もセットアップをしないということになる

継承する場合は親のコンストラクタを呼ぶ必要がある

contract ConstructorSample {
uint a;

constructor(uint x) {
a = x;
}
}

contract ConstructorChild is ConstructorSample {
uint b;

constructor(uint x) Constructor(x) {
b = x;
}
}

constant

constantは代入不可能な定数

変数宣言時に値を代入しておく必要がある

contract Constant {
uint constant a = 1;

// Impossible to substitute from constructor
constructor() {
a = 2;
}

// Impossible to substitute from function
function setConstant() {
a = 3;
}
}

immutable

immutableの役割はconstantとほぼ同じだが、constructorでのみ代入可能になる

contract Immutable {
uint immutable a;

// Possible to substitute from constructor
constructor() {
a = 2;
}

// Impossible to substitute from function
function setImmutable() {
a = 3;
}
}

Reference