0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Solidityのfunction visibility(external, public, internal, private)について

Posted at

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?