こんにちわ、オオバです。
Unityでゲームを作りながら趣味でブロックチェーンの勉強をしています。

Solidityを学習中、ここ数年で仕様が変わっている模様。
バージョン毎のSolidityコンストラクタ仕様を調査しました。

結論

この記事の内容

v0.4.21まではContract名がコンストラクタ

pragma solidity >=0.4.0 <=0.8.4;  

contract HelloWorld  
{
    uint public storedData;  

    function HelloWorld (uint value) public {  
        storedData = value;  
    }
}

v0.4.22以降はconstructorキーワードでコンストラクタをサポート

v0.4.22以降は👇 constructorキーワードを使った無名関数でコンストラクタを定義します。

pragma solidity >=0.4.0 <=0.8.4;  

contract HelloWorld  
{
    uint public storedData;  

    constructor (uint value) public {  
        storedData = value;  
    }
}

またv0.6.12まではコンストラクタにはpublicが必須です。
publicを外すと以下の警告👇。

Warning: No visibility specified. Defaulting to "public". constructor (uint value) { ^ (Relevant source part starts here and spans across multiple lines).  

Contract名のメソッドを定義すると警告

Warning: Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead. function HelloWorld (uint value) public { ^ (Relevant source part starts here and spans across multiple lines).  

👆のようにv0.4.22以降ではContract名のメソッドは定義できません。

v0.7.0以降はコンストラクタにpublicは不要

v0.7.0以降は👇以下のようにpublicを削除した形が正しいです。

pragma solidity >=0.4.0 <=0.8.4;  

contract HelloWorld  
{
    uint public storedData;  

    constructor (uint value) {  
        storedData = value;  
    }
}

とりあえず、最新のv0.8.4にしても正常にコンパイルは通りました。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境