Lição: 010: Visão Geral dos Tipos de Dados em Solidity
Nesta aula, vamos explorar os diferentes tipos de dados disponíveis em Solidity, a linguagem de programação usada para escrever contratos inteligentes na blockchain Ethereum. Compreender esses tipos de dados é essencial para a construção de contratos inteligentes eficientes e seguros.
1. Tipos de Valor
Os tipos de valor mantêm seus valores diretamente em seus próprios locais de memória. Quando você atribui um tipo de valor a outro, uma cópia do valor é feita.
1.1. Booleano
O tipo bool
representa um valor verdadeiro ou falso.
pragma solidity ^0.8.0;
contract ExemploBooleano {
bool public ativo;
function definirAtivo(bool _ativo) public {
ativo = _ativo;
}
}
1.2. Tipos Inteiros
Solidity oferece vários tipos inteiros, que podem ser assinados ou não assinados.
- Inteiros assinados:
int8
,int16
,int32
,int64
,int128
,int256
- Inteiros não assinados:
uint8
,uint16
,uint32
,uint64
,uint128
,uint256
Exemplo de uso de inteiros não assinados:
pragma solidity ^0.8.0;
contract ExemploInteiro {
uint public contagem;
function incrementar() public {
contagem++;
}
}
1.3. Endereço
O tipo address
representa um endereço Ethereum. Ele é usado para armazenar o endereço de um contrato ou de uma conta de propriedade externa (EOA).
pragma solidity ^0.8.0;
contract ExemploEndereco {
address public dono;
constructor() {
dono = msg.sender; // O endereço que implanta o contrato
}
}
1.4. Arrays de Bytes de Tamanho Fixo
Estes são usados para armazenar dados brutos em bytes. O comprimento do array de bytes deve ser especificado.
bytes1
abytes32
Exemplo:
pragma solidity ^0.8.0;
contract ExemploBytes {
bytes32 public dados;
function definirDados(bytes32 _dados) public {
dados = _dados;
}
}
2. Tipos de Referência
Os tipos de referência armazenam referências aos dados reais em vez dos dados em si. Alterações feitas nos dados afetarão todas as referências que apontam para eles.
2.1. Strings
Strings em Solidity são arrays de bytes de comprimento variável. Elas podem armazenar texto.
pragma solidity ^0.8.0;
contract ExemploString {
string public saudacao;
function definirSaudacao(string memory _saudacao) public {
saudacao = _saudacao;
}
}
2.2. Arrays
Solidity suporta arrays de tamanho fixo e dinâmicos.
Array de Tamanho Fixo
pragma solidity ^0.8.0;
contract ExemploArrayFixo {
uint[5] public numeros; // Array de 5 inteiros não assinados
function definirNumero(uint indice, uint valor) public {
require(indice < 5, "Índice fora dos limites");
numeros[indice] = valor;
}
}
Array Dinâmico
pragma solidity ^0.8.0;
contract ExemploArrayDinamico {
uint[] public numeros; // Array dinâmico de inteiros não assinados
function adicionarNumero(uint valor) public {
numeros.push(valor);
}
}
2.3. Estruturas
Estruturas são tipos de dados definidos pelo usuário usados para agrupar dados relacionados.
pragma solidity ^0.8.0;
contract ExemploEstrutura {
struct Pessoa {
string nome;
uint idade;
}
Pessoa public pessoa;
function definirPessoa(string memory _nome, uint _idade) public {
pessoa = Pessoa(_nome, _idade);
}
}
2.4. Mapeamentos
Mapeamentos são armazenamentos de chave-valor onde as chaves são únicas e se mapeiam para valores. Eles são comumente usados para associar endereços a saldos ou outros dados.
pragma solidity ^0.8.0;
contract ExemploMapping {
mapping(address => uint) public saldos;
function depositar() public payable {
saldos[msg.sender] += msg.value; // Adiciona ao saldo do remetente
}
}
Conclusão
Nesta aula, abordamos os vários tipos de dados disponíveis em Solidity, incluindo tipos de valor (booleanos, inteiros, endereços, etc.) e tipos de referência (strings, arrays, estruturas, mapeamentos). Entender esses tipos de dados é crucial para um design e implementação eficientes de contratos inteligentes. Nas futuras aulas, exploraremos como utilizar esses tipos de dados de forma eficaz na construção de contratos inteligentes mais complexos.