Solidity - Функции
Функция - это группа многократно используемого кода, который можно вызывать в любом месте вашей программы. Это избавляет от необходимости писать один и тот же код снова и снова. Это помогает программистам писать модульные коды. Функции позволяют программисту разделить большую программу на несколько небольших и управляемых функций.
Как и любой другой продвинутый язык программирования, 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
}
}
Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .
Вывод
0: string: 3
Параметры функции
До сих пор мы видели функции без параметров. Но есть возможность передавать различные параметры при вызове функции. Эти переданные параметры могут быть захвачены внутри функции, и над этими параметрами можно производить любые манипуляции. Функция может принимать несколько параметров, разделенных запятыми.
пример
Попробуйте следующий пример. Мы использовалиuint2strфункции здесь. Требуется один параметр.
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
}
}
Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .
Вывод
0: string: 3
Заявление о возврате
Функция 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);
}
}
Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .
Вывод
0: uint256: product 2
1: uint256: sum 3