| title | 2. Tipos de Valor | |||
|---|---|---|---|---|
| tags |
|
Recentemente, tenho revisado Solidity para consolidar alguns detalhes e estou escrevendo um "WTF Introdução Simplificada ao Solidity" para ajudar iniciantes (programadores avançados podem procurar outros tutoriais). Será atualizado semanalmente com 1-3 lições.
Twitter: @0xAA_Science
Comunidade: Discord|Grupo no WeChat|Website wtf.academy
Todo o código e tutorial estão disponíveis no Github: github.com/AmazingAng/WTF-Solidity
-
Tipo de Valor (Value Type): incluem booleanos, inteiros, etc., esses tipos de variáveis passam diretamente o valor ao serem atribuídas.
-
Tipo de Referência (Reference Type): incluem arrays e structs, esses tipos de variáveis ocupam mais espaço e passam o endereço diretamente ao serem atribuídas (semelhante a ponteiros).
-
Tipo de Mapeamento (Mapping Type): Estrutura de dados para armazenar pares chave-valor no Solidity, pode ser entendido como uma tabela de hash.
Vamos abordar apenas os tipos comuns, os tipos menos utilizados não serão abordados, e neste artigo, falaremos sobre tipos de valor.
O tipo booleano é uma variável binária, com valores true ou false.
// Booleano
bool public _bool = true;Os operadores booleanos incluem:
!(negação lógica)&&(e lógico, "and")||(ou lógico, "or")==(igual a)!=(diferente de)
// Operações booleanas
bool public _bool1 = !_bool; // negação
bool public _bool2 = _bool && _bool1; // e
bool public _bool3 = _bool || _bool1; // ou
bool public _bool4 = _bool == _bool1; // igual
bool public _bool5 = _bool != _bool1; // diferenteNo código acima: a variável _bool possui o valor true; _bool1 é a negação de _bool, ou seja, false; _bool && _bool1 é false; _bool || _bool1 é true; _bool == _bool1 é false; _bool != _bool1 é true.
Observe que: os operadores && e || seguem a regra da avaliação de curto-circuito, o que significa que, se houver uma expressão f(x) || g(y), e f(x) for true, g(y) não será avaliado, mesmo que o resultado seja o oposto de f(x). Da mesma forma, se houver uma expressão f(x) && g(y), e f(x) for false, g(y) não será avaliado.
Os inteiros são tipos de dados inteiros no Solidity, os mais comuns são:
// Inteiros
int public _int = -1; // inteiro, incluindo números negativos
uint public _uint = 1; // inteiro positivo
uint256 public _number = 20220330; // inteiro positivo de 256 bitsOs operadores de inteiro comuns incluem:
- Operadores de comparação (retornam um valor booleano):
<=,<,==,!=,>=,> - Operadores aritméticos:
+,-,*,/,%(resto da divisão),**(potenciação)
// Operações com inteiros
uint256 public _number1 = _number + 1; // +, -, *, /
uint256 public _number2 = 2**2; // potenciação
uint256 public _number3 = 7 % 2; // resto da divisão
bool public _numberbool = _number2 > _number3; // comparaçãoVocê pode executar o código acima para ver os valores das 4 variáveis.
O tipo de dado endereço (address) possui duas variantes:
- Endereço normal (address): armazena um valor de 20 bytes (tamanho de um endereço Ethereum).
- Endereço pagável (payable address): além do endereço normal, inclui os métodos
transferesendpara receber transferências de Ether.
Falaremos mais sobre endereços pagáveis em capítulos posteriores.
// Endereço
address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
address payable public _address1 = payable(_address); // endereço pagável, permite transferências e verificar saldo
// Membros do tipo de endereço
uint256 public balance = _address1.balance; // saldo do endereçoOs arrays de bytes podem ser de comprimento fixo ou variável:
- Arrays de bytes de comprimento fixo: são tipos de valor, o comprimento do array não pode ser alterado após a declaração. Existem tipos como
bytes1,bytes8,bytes32, etc. O máximo é armazenar 32 bytes, ou seja,bytes32. - Arrays de bytes de comprimento variável: são tipos de referência (serão abordados em capítulos posteriores), o comprimento do array pode ser alterado após a declaração, como o tipo
bytes.
// Array de Bytes de Comprimento Fixo
bytes32 public _byte32 = "MiniSolidity";
bytes1 public _byte = _byte32[0]; No código acima, a variável MiniSolidity é armazenada em _byte32 como uma sequência de bytes. Se convertido para hexadecimal, seria: 0x4d696e69536f6c69646974790000000000000000000000000000000000000000
O valor de _byte será o primeiro byte de _byte32, ou seja, 0x4d.
Enum é um tipo de dado que pode ser definido pelo usuário no Solidity. Geralmente é usado para atribuir nomes a uint, facilitando a leitura e manutenção do código. Se parece com enum em linguagens como C, onde os nomes são atribuídos a partir de 0.
// Definindo um enum para Buy, Hold e Sell
enum ActionSet { Buy, Hold, Sell }
// Criando uma variável enum chamada action
ActionSet action = ActionSet.Buy;É possível converter explicitamente enum em uint e vice-versa, e o Solidity verificaria se o inteiro positivo convertido está dentro do intervalo do enum, caso contrário, ocorrerá um erro:
// Conversão explícita de enum em uint
function enumToUint() external view returns(uint){
return uint(action);
}O enum é um tipo de dados pouco utilizado, raramente usado.
- Após a implantação do contrato, é possível verificar os valores das variáveis de cada tipo:
- Exemplo de conversão entre
enumeuint:
Neste artigo, apresentamos os tipos de valor no Solidity, incluindo booleanos, inteiros, endereços, arrays de bytes de comprimento fixo e enum. Nos próximos capítulos, continuaremos discutindo outros tipos de variáveis no Solidity, como os tipos de referência e mapeamento.


