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

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

結論

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

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にしても正常にコンパイルは通りました。

オススメ記事
検証環境