Solidność - funkcje

Funkcja to grupa kodu wielokrotnego użytku, który można wywołać w dowolnym miejscu programu. Eliminuje to konieczność wielokrotnego pisania tego samego kodu. Pomaga programistom w pisaniu kodów modułowych. Funkcje pozwalają programiście podzielić duży program na kilka małych i łatwych w zarządzaniu funkcji.

Jak każdy inny zaawansowany język programowania, Solidity obsługuje również wszystkie funkcje niezbędne do pisania kodu modułowego przy użyciu funkcji. Ta sekcja wyjaśnia, jak pisać własne funkcje w Solidity.

Definicja funkcji

Zanim użyjemy funkcji, musimy ją zdefiniować. Najczęstszym sposobem definiowania funkcji w Solidity jest użycie rozszerzeniafunction słowo kluczowe, po którym następuje unikatowa nazwa funkcji, lista parametrów (która może być pusta) oraz blok instrukcji otoczony nawiasami klamrowymi.

Składnia

Tutaj pokazano podstawową składnię.

function function-name(parameter-list) scope returns() {
   //statements
}

Przykład

Wypróbuj następujący przykład. Definiuje funkcję o nazwie getResult, która nie przyjmuje parametrów -

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;
   }
}

Wywołanie funkcji

Aby wywołać funkcję w dalszej części kontraktu, wystarczy wpisać nazwę tej funkcji, jak pokazano w poniższym kodzie.

Wypróbuj poniższy kod, aby zrozumieć, jak działa łańcuch w 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
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Wynik

0: string: 3

Parametry funkcji

Do tej pory widzieliśmy funkcje bez parametrów. Istnieje jednak możliwość przekazywania różnych parametrów podczas wywoływania funkcji. Te przekazane parametry można przechwycić wewnątrz funkcji i można na nich wykonać dowolną manipulację. Funkcja może przyjmować wiele parametrów oddzielonych przecinkami.

Przykład

Wypróbuj następujący przykład. Użyliśmyuint2strdziałają tutaj. Zajmuje jeden parametr.

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
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Wynik

0: string: 3

Instrukcja return

Funkcja Solidity może mieć opcjonalne returnkomunikat. Jest to wymagane, jeśli chcesz zwrócić wartość z funkcji. Ta instrukcja powinna być ostatnią instrukcją w funkcji.

Jak w powyższym przykładzie, używamy funkcji uint2str, aby zwrócić ciąg.

W Solidity funkcja może również zwracać wiele wartości. Zobacz poniższy przykład -

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);
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Wynik

0: uint256: product 2
1: uint256: sum 3