こんにちは、エンジニアのオオバです。
Ethereumの開発をするために今はSolidityをメインに学習中。
Remix IDEでSolidityを動かしてみて思ったのは、
言語仕様を理解する必要があるということ。
こういうときぼくは公式ドキュメントに立ち返ります。
ネット上に散らばる資料も勉強にはなりますが、
公式ドキュメントの情報に勝るものはありません。
ということで現在Solidityの公式ドキュメントを粛々と読んでいる最中。
そこで気づいたことをブログにメモしています。
※【執筆時点】Solidityのバージョンは0.8.4
Solidity — Solidity 0.8.4 documentation
ここらは本題です。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
Solidityのコンパイラはpublic変数のgetterを自動生成してくれていた件
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
contract hoge {
uint public piyo;
}
👆こちらコードではpiyo
というpublic変数を定義したコントラクトです。
function piyo() external view returns (uint) { return piyo; }
👆内部的には以下のようなgetter関数が作られています。
getterとは読み取り専用の関数の事です。
具体的なコードを見ていきましょう。
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
contract Hoge {
uint public piyo;
}
contract Foo {
function execute() public {
Hoge hoge = new Hoge();
// getterが自動生成されているためアクセス可能
uint result = hoge.piyo();
}
}
このようにpiyoは外(Foo)からpiyo()
という形でアクセスが可能です。
わざわざgetterを定義しなくても良いので便利ですね。
注意点
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
contract Hoge {
uint public piyo;
function piyo() external view returns(uint){
return piyo;
}
}
👆このようにgetterであるpiyo()
を開発者は定義できません。
DeclarationError: Identifier already declared
コンパイラー的にはすでに定義済みとのことです。
まとめ
本記事ではSolidityのpublic変数について学んできました。
- public変数を定義すると対となるgetterを自動生成
- 自分で同名のgetterは定義は不可(コンパイルエラー)
今回はこれだけ覚えておきましょう。

この記事が気に入ったらフォローしよう
- macOS Catalina 10.15.7
- npm v7.11.2
- nx v10.0.6
- Remix 0.12.0-dev
- Brave(ブラウザ)1.24.86 Chromium 90.0.4430.212(Official Build) (x86_64)