イーサリアムの開発言語であるSolidityで扱う、関数・変数の参照制約(private,public,internal,external)の種類・違いについて紹介しています。
参照可能な範囲
参照制約 | コントラクト内部 | コントラクト外部 | 継承先 |
---|---|---|---|
public | 〇 | 〇 | 〇 |
private | 〇 | × | × |
internal | 〇 | × | 〇 |
external | × | 〇 | × |
変数における可視性
- public
- getterが自動的に作成される
- 外部から参照する場合はgetter呼び出し、内部から参照する場合は値を直接読み取る
- setterは作成されないため、外部からは更新できない
- internal
- 変数のデフォルト値となる
- 内部もしくは、継承先からのみ参照可能
- private
- 内部からのみ参照可能
- internalとの違いは、継承先から参照不可能な点のみ
関数における可視性
関数の呼び出し方法には、内部呼び出し・外部呼出しの2種類があります。
- external
- 外部からのみ呼び出し可能
- 外部呼出しを用いれば、内部でも呼び出し可能(this.f())
- public
- 関数のデフォルト値となる
- 内部呼び出し、外部呼出しどちらでも呼び出し可能
- internal
- 内部もしくは、継承先からのみ呼び出し可能
- internal型のパラメータを取得できる
- private
- 内部からのみ参照可能
- internalとの違いは、継承先から呼び出し不可能な点のみ
参照制約の使い方
関数名の後方に記載するだけ
function a() public {} function b() private {} function c() internal {} function d() external {}