イーサリアムの開発言語である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 {}
