Solidity-libraries

提供:Dev Guides
移動先:案内検索

堅牢性-ライブラリ

ライブラリは契約に似ていますが、主に再利用を目的としています。 ライブラリには、他のコントラクトが呼び出すことができる関数が含まれています。 Solidityには、ライブラリの使用に関する特定の制限があります。 Solidity Libraryの主要な特徴は次のとおりです。

  • ライブラリ関数は、状態を変更しない場合、直接呼び出すことができます。 つまり、純粋な関数またはビュー関数は、ライブラリの外部からのみ呼び出すことができます。
  • ライブラリはステートレスであると想定されるため、破棄できません。
  • ライブラリに状態変数を含めることはできません。
  • ライブラリは要素を継承できません。
  • ライブラリは継承できません。

Solidityでライブラリがどのように機能するかを理解するには、次のコードを試してください。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;

     //search if value is present in the array using Library function
      uint index = Search.indexOf(data, value);
      return index;
   }
}

link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。

-展開ボタンをクリックする前に、ドロップダウンからテストを選択します。

出力

0: uint256: 3

Forの使用

ディレクティブ using A for B; を使用して、ライブラリAのライブラリ関数を特定のタイプBにアタッチできます。 これらの関数は、最初のパラメーターとして呼び出し側タイプを使用します(selfを使用して識別されます)。

Solidityでライブラリがどのように機能するかを理解するには、次のコードを試してください。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++)if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   using Search for uint[];
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;

     //Now data is representing the Library
      uint index = data.indexOf(value);
      return index;
   }
}

link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。

-展開ボタンをクリックする前に、ドロップダウンからテストを選択します。

出力

0: uint256: 3