SolidityのfunctionにはJavaやPHPなどの言語と同様にvisibility(≒アクセス修飾子)を設定できますが、修飾子の種類としては、
- public
- private
- internal
- external
の4種類があります。
(なお公式ではVisibilityという記述になっており、日本語としてはアクセス修飾子というより単に可視性と訳すのが良さそうです。)
JavaにあるprotedtedはSolidityにはなく、internalとexternalに関してはSolidity独自言えるでしょう。
この記事ではそれらのvisibilityについてまとめてみます。
external
externalな関数は外部の別のコントラクトから呼び出すことが可能です。
内部から呼び出す時には注意が必要で、 function hoge()
という関数がある場合に、単に hoge()
で呼び出すことはできず、 this.hoge()
と書く必要があります。
public
publicな関数は外部からも内部からも制限なく呼び出すことができる関数です。
またpublicな状態変数に関しては自動的にgetter関数が定義されます。
internal
internalな関数と状態変数は、thisを使うことなくコントラクトの内部からのみ呼び出すことができます。
private
privateな関数と状態変数は定義されたコントラクトの中だけで使うことができ、継承したコントラクトで利用することはできません。
それぞれのvisibilityをテーブルにまとめると、下記のようになります。
外部からの呼び出し | 内部からの呼び出し | 継承可能 | ゲッターの自動生成 | |
---|---|---|---|---|
external | true | false | true | false |
public | true | true | true | true |
internal | false | true | true | false |
private | false | true | false | false |