Solidityを使っているとfunctionを定義する時にpublicやらいろいろ修飾子をつけるのですが、いっぱいあってよくわからなくなるので意味をメモ書きします。
- internal,external,public,private
- public コントラクト内部からも、外部メッセージでも呼び出すことができるfunction
- external ほぼpublicと一緒だが内部でfunctionを呼び出す時にthis.(function名)と呼ばないといけない (External functions are sometimes more efficient when they receive large arrays of data.) とも書いてあるので使うといいことあるかも?
- internal 定義したコントラクトと派生コントラクトのみで呼び出すことができる。外部呼び出し不可
- private 定義したコントラクトのみで呼び出し可能。派生コントラクトでも呼び出し不可
- pure
- 状態変数を読みも書きもしないfunction
- constant, view
- 状態変数はreadonlyで書き込まないfunction
- payable
- Etherを送信できるfunction
ちなみにSolidityではmodifier構文でカスタムの修飾子を作ることができます。このあたりも開発の時はドキュメント化しないとわからなくなりますね。あとJava、C#と違って修飾子がパラメータの後ろにつけるところも間違えやすいので注意。
contract Hoge {
address owner;
/* トランザクション送信者がownerであることを確認するmodifier */
modifier onlyOwner() { assert(msg.sender == owner); _; }
function ownerOnlyFunction() public onlyOwner {
/* owner限定で実行できるfunction */
}
}