問題一覧に戻る
初級関数
問題28: 関数の可視性
Solidityの関数可視性修飾子を学習します。これらは関数を呼び出せる人を制御します:public(誰でも)、external(外部からのみ)、internal(このコントラクトと派生)、private(このコントラクトのみ)。可視性はセキュリティとガス最適化に重要です。external関数は外部呼び出しでpublicよりガス効率的です。internalとprivate関数はロジックをカプセル化します。可視性の理解は適切なアクセス制御を確保し、スマートコントラクトでの不正な関数呼び出しを防ぎます。
pragma solidity ^0.8.0;
contract FunctionVisibility {
uint256 private counter = 0;
// 誰でも呼び出し可能
function increment() {
counter++;
}
// 外部からのみ呼び出し可能
function getCounter() view returns (uint256) {
return counter;
}
// 継承先でも使用可能
function _reset() {
counter = 0;
}
// このコントラクト内のみ
function _validate() view returns (bool) {
return counter < 100;
}
}