こんにちは、エンジニアのオオバです。

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変数について学んできました。

今回はこれだけ覚えておきましょう。

オススメ記事
検証環境