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