Solidity é uma linguagem de programação de alto nível orientada a objetos que é usada para escrever contratos inteligentes e construir D-apps. Ela também suporta herança, bibliotecas e tipos sofisticados definidos pelo usuário. Solidity é uma linguagem tipada estaticamente. Isso significa que você terá que declarar o tipo de variáveis com antecedência, ao contrário do javascript.
Qualquer linguagem de programação possui tipos e estruturas de dados básicos que são usados para escrever programas lógicos. Por que Solidity deveria ser diferente? Vamos dar uma olhada nos tipos de dados que estão disponíveis no Solidity:
Tipos de Data Types
Existem dois data types (tipos de dados) em Solidity.
Value Types (Tipos de valor)
Um tipo de valor armazena seus dados diretamente na memória que possui. Um tipo de valor manterá uma cópia independente de quaisquer variáveis duplicadas. Portanto, uma alteração no valor de uma variável duplicada não afetará a variável original.
Por exemplo
uint a = 2;
uint b = a;
a = 3;
No caso acima, a = 3 e b = 2.
Existem vários tipos de valor em Solidity:
- Booleano: Este tipo de dados aceita apenas dois valores: True ou False.
- Inteiro: (Integer) Este tipo de dados é usado para armazenar valores inteiros, int e uint são usados para declarar inteiros assinados e não assinados, respectivamente.
- Números de ponto fixo: esses tipos de dados ainda não são totalmente suportados em Solidity, conforme a documentação do Solidity. Eles podem ser declarados como fixos e não fixos para números de ponto fixo com e sem sinal de tamanhos variados, respectivamente.
- Endereço: O endereço contém um valor de 20 bytes que representa o tamanho de um endereço Ethereum. Um endereço pode ser usado para obter saldo ou para transferir um saldo por saldo e método de transferência, respectivamente.
- Bytes e Strings: Bytes são usados para armazenar um conjunto de caracteres de tamanho fixo enquanto a string é usada para armazenar o conjunto de caracteres igual ou superior a um byte. O comprimento dos bytes é de 1 a 32, enquanto a string tem um comprimento dinâmico. Byte tem a vantagem de usar menos gás, então é melhor usar quando sabemos o tamanho dos dados.
- Enums: é usado para criar tipos de dados definidos pelo usuário, usados para atribuir um nome a uma constante integral que torna o contrato mais legível, sustentável e menos propenso a erros. As opções de enums podem ser representadas por valores inteiros sem sinal começando em 0.
Aqui está um simples contrato em Solidity que demonstra cada um dos tipos de valor. Você pode copiar e colar diretamente o seguinte código no IDE Remix.
// Programa Solidity para demonstração
// tipos de valores
pragma solidity ^0.8.5;
// Criação de um contrato
contract DemoValueTypes {
// Inicializando a variável Bool
bool public boolean;
// Inicialização da variável Integer
int32 public intVar = -60313;
// Inicialização da variável String
string public str = "Esta é a string de exemplo";
// Inicialização da variável Byte
bytes1 public b = "a";
// Definição de um enumerador
enum sampleEnum { first, second, third, defaultValue }
// Definição de uma função para retornar valores armazenados em um ENUM
function accessEnum(uint8 index) public pure returns(
sampleEnum) {
if (index == 0) {
return sampleEnum.first;
} else if (index == 1) {
return sampleEnum.second;
} else if (index == 2) {
return sampleEnum.third;
} else {
return sampleEnum.defaultValue;
}
}
}
Reference Types (Tipos de referência)
Variáveis de tipo de referência armazenam a localização dos dados. Elas não compartilham os dados diretamente. Com a ajuda do tipo de referência, duas variáveis diferentes podem se referir ao mesmo local onde qualquer alteração em uma variável pode afetar a outra. O tipo de referência em Solidity está listado abaixo:
- Arrays: Como qualquer outra linguagem, um array é usado para armazenar variáveis do mesmo tipo de dados. Usando a posição do índice, a variável no local desejado pode ser acessada. O tamanho do array pode ser fixo ou dinâmico. É possível marcar arrays de variáveis de estado como públicos e fazer com que o Solidity crie um getter. O índice numérico torna-se um parâmetro obrigatório para o getter (utilizado para proteger seus dados, especialmente na criação de classes). O acesso a um array além de seu fim causa uma asserção falhada. Os métodos .push() e .push(value) podem ser usados para anexar um novo elemento no final do array, onde .push() anexa um elemento inicializado com zero e retorna uma referência a ele.
- Struct: Solidity permite que os usuários criem e definam seu próprio tipo na forma de estruturas. A estrutura é um grupo de tipos diferentes, embora não seja possível conter um membro de seu próprio tipo. A estrutura é uma variável de tipo de referência que pode conter tanto o tipo de valor quanto o tipo de referência.
- Mapeamento: o mapeamento é um tipo de referência mais usado que armazena os dados em um par chave-valor onde uma chave pode ser qualquer tipo de valor. É como uma hashtable ou dicionário como em qualquer outra linguagem de programação, onde os dados podem ser recuperados por chave.
Aqui está um contrato simples em Solidity que demonstra cada um dos tipos de referência. Você pode copiar e colar diretamente o seguinte código no IDE Remix.
// Programa Solidity para demonstração
// tipos de valores
pragma solidity ^0.8.5;
// Criando um contrato
contract DemoReferenceTypes {
// Definindo um array de tamanho fixo
uint[5] public fixedSizeArray = [uint(1), 2, 3, 4, 5];
// Definindo de uma estrutura
struct DemoStruct {
string firstVar;
address secondVar;
uint8 thirdVar;
}
// Criando de um objeto de estrutura
DemoStruct public struct1;
// Criando um mapeamento
mapping (address => DemoStruct) public sampleMapping;
address[] student_result;
constructor() {
struct1.firstVar = "abcd";
struct1.secondVar = address(0x0);
struct1.thirdVar = 1;
sampleMapping[address(0x10)] = struct1;
}
}
Vamos nos aprofundar em cada um dos tipos de dados nas postagens a seguir. Siga no twitter para mais postagens e atualizações.
Originalmente publicado em https://bitsbyblocks.com em 13 de julho de 2022. Traduzido por Marcelo Panegali.
Latest comments (0)