Solidity-functions
堅牢性-機能
関数は、プログラム内のどこからでも呼び出すことができる再利用可能なコードのグループです。 これにより、同じコードを何度も記述する必要がなくなります。 プログラマーがモジュラーコードを書くのに役立ちます。 関数を使用すると、プログラマは大きなプログラムをいくつかの小さく管理可能な関数に分割できます。
他の高度なプログラミング言語と同様に、Solidityは関数を使用してモジュラーコードを記述するために必要なすべての機能もサポートしています。 このセクションでは、Solidityで独自の関数を作成する方法について説明します。
関数定義
関数を使用する前に、定義する必要があります。 Solidityで関数を定義する最も一般的な方法は、 function キーワードを使用し、その後に一意の関数名、パラメーターのリスト(空の場合がある)、および中括弧で囲まれたステートメントブロックを使用することです。
構文
基本的な構文は次のとおりです。
function function-name(parameter-list) scope returns() {
//statements
}
例
次の例を試してください。 パラメータを取らないgetResultと呼ばれる関数を定義します-
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint){
uint a = 1;//local variable
uint b = 2;
uint result = a + b;
return result;
}
}
関数を呼び出す
コントラクトのどこかで関数を呼び出すには、次のコードに示すように、その関数の名前を記述するだけです。
Solidityでの文字列の動作を理解するには、次のコードを試してください。
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j/= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i/= 10;
}
return string(bstr);//access local variable
}
}
link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。
出力
0: string: 3
関数パラメーター
これまで、パラメーターのない関数を見てきました。 ただし、関数の呼び出し中に異なるパラメーターを渡す機能があります。 これらの渡されたパラメーターは関数内でキャプチャーでき、これらのパラメーターに対して任意の操作を実行できます。 関数は、コンマで区切られた複数のパラメーターを取ることができます。
例
次の例を試してください。 ここでは uint2str 関数を使用しました。 1つのパラメーターを取ります。
pragma solidity ^0.5.0;
contract SolidityTest {
constructor() public{
}
function getResult() public view returns(string memory){
uint a = 1;
uint b = 2;
uint result = a + b;
return integerToString(result);
}
function integerToString(uint _i) internal pure
returns (string memory) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j/= 10;
}
bytes memory bstr = new bytes(len);
uint k = len - 1;
while (_i != 0) {
bstr[k--] = byte(uint8(48 + _i % 10));
_i/= 10;
}
return string(bstr);//access local variable
}
}
link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。
出力
0: string: 3
returnステートメント
Solidity関数には、オプションの return ステートメントを含めることができます。 これは、関数から値を返す場合に必要です。 このステートメントは、関数の最後のステートメントでなければなりません。
上記の例のように、uint2str関数を使用して文字列を返します。
Solidityでは、関数は複数の値を返すこともできます。 以下の例を参照してください-
pragma solidity ^0.5.0;
contract Test {
function getResult() public view returns(uint product, uint sum){
uint a = 1;//local variable
uint b = 2;
product = a * b;
sum = a + b;
//alternative return statement to return
//multiple values
//return(a*b, a+b);
}
}
link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。
出力
0: uint256: product 2
1: uint256: sum 3