Solidez - Funções

Uma função é um grupo de código reutilizável que pode ser chamado em qualquer lugar em seu programa. Isso elimina a necessidade de escrever o mesmo código repetidamente. Ajuda os programadores a escrever códigos modulares. As funções permitem que um programador divida um grande programa em várias funções pequenas e gerenciáveis.

Como qualquer outra linguagem de programação avançada, Solidity também oferece suporte a todos os recursos necessários para escrever código modular usando funções. Esta seção explica como escrever suas próprias funções no Solidity.

Definição de Função

Antes de usarmos uma função, precisamos defini-la. A maneira mais comum de definir uma função no Solidity é usando ofunction palavra-chave, seguida por um nome de função exclusivo, uma lista de parâmetros (que pode estar vazia) e um bloco de instrução cercado por chaves.

Sintaxe

A sintaxe básica é mostrada aqui.

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

Exemplo

Experimente o seguinte exemplo. Ele define uma função chamada getResult que não aceita parâmetros -

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

Chamando uma função

Para invocar uma função em algum lugar posteriormente no Contrato, você simplesmente precisa escrever o nome dessa função conforme mostrado no código a seguir.

Experimente o código a seguir para entender como a string funciona no 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
   }
}

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Resultado

0: string: 3

Parâmetros de Função

Até agora, vimos funções sem parâmetros. Mas existe uma facilidade para passar parâmetros diferentes ao chamar uma função. Esses parâmetros passados ​​podem ser capturados dentro da função e qualquer manipulação pode ser feita sobre esses parâmetros. Uma função pode ter vários parâmetros separados por vírgula.

Exemplo

Experimente o seguinte exemplo. Nós usamos umuint2strfunção aqui. Leva um parâmetro.

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

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Resultado

0: string: 3

A declaração de retorno

A função Solidity pode ter um opcional returndeclaração. Isso é necessário se você deseja retornar um valor de uma função. Esta declaração deve ser a última declaração em uma função.

Como no exemplo acima, estamos usando a função uint2str para retornar uma string.

No Solidity, uma função pode retornar vários valores também. Veja o exemplo abaixo -

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

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Resultado

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