Solidità - Funzioni

Una funzione è un gruppo di codice riutilizzabile che può essere chiamato ovunque nel programma. Ciò elimina la necessità di scrivere ripetutamente lo stesso codice. Aiuta i programmatori a scrivere codici modulari. Le funzioni consentono a un programmatore di dividere un grande programma in un numero di funzioni piccole e gestibili.

Come ogni altro linguaggio di programmazione avanzato, Solidity supporta anche tutte le funzionalità necessarie per scrivere codice modulare utilizzando le funzioni. Questa sezione spiega come scrivere le proprie funzioni in Solidity.

Definizione di funzione

Prima di usare una funzione, dobbiamo definirla. Il modo più comune per definire una funzione in Solidity è usare ilfunction parola chiave, seguita da un nome di funzione univoco, un elenco di parametri (che potrebbe essere vuoto) e un blocco di istruzioni racchiuso tra parentesi graffe.

Sintassi

La sintassi di base è mostrata qui.

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

Esempio

Prova il seguente esempio. Definisce una funzione chiamata getResult che non accetta parametri -

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

Chiamare una funzione

Per richiamare una funzione in un punto successivo del contratto, è sufficiente scrivere il nome di tale funzione come mostrato nel codice seguente.

Prova il codice seguente per capire come funziona la stringa in 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
   }
}

Eseguire il programma precedente utilizzando i passaggi forniti nel capitolo Solidity First Application .

Produzione

0: string: 3

Parametri di funzione

Finora abbiamo visto funzioni senza parametri. Ma c'è la possibilità di passare parametri diversi durante la chiamata a una funzione. Questi parametri passati possono essere catturati all'interno della funzione e qualsiasi manipolazione può essere eseguita su quei parametri. Una funzione può accettare più parametri separati da virgola.

Esempio

Prova il seguente esempio. Abbiamo utilizzato un fileuint2strfunzione qui. Ci vuole un parametro.

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

Eseguire il programma precedente utilizzando i passaggi forniti nel capitolo Solidity First Application .

Produzione

0: string: 3

La dichiarazione di ritorno

Una funzione Solidità può avere un optional returndichiarazione. Ciò è necessario se si desidera restituire un valore da una funzione. Questa istruzione dovrebbe essere l'ultima istruzione in una funzione.

Come nell'esempio precedente, stiamo usando la funzione uint2str per restituire una stringa.

In Solidity, una funzione può restituire anche più valori. Guarda l'esempio di seguito -

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

Eseguire il programma precedente utilizzando i passaggi forniti nel capitolo Solidity First Application .

Produzione

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