Explorar tipos de valor

Concluído

Nesta unidade, você aprenderá sobre os tipos de valor principal no Solidity. Os tipos de valor são passados por valor e copiados quando usados. Os tipos de valor primário que você usará ao escrever contratos incluem inteiro, booliano, string literal, endereço e enumeração.

Inteiros

Os inteiros são usados em cada arquivo de origem do Solidity. Eles representam números inteiros e podem ser com ou sem sinal. Intervalo de inteiros no tamanho do armazenamento de 8 bits a 256 bits.

  • Assinado: inclui números negativos e positivos. Pode ser representado como int.
  • Sem sinal: incluem apenas números positivos. Pode ser representado como uint.

Se um número de bits não for especificado, o valor padrão será de 256 bits.

As seguintes operações podem ser aplicadas a inteiros:

  • Comparações: <=, <, ==, !=, >=, >
  • Operadores de bits: & (and), | (or), ^ (bitwise exclusive), ~ (bitwise negation)
  • Operadores aritméticos: + (addition),- (subtraction), * (multiplication), / (division), % (modulo), ** (exponential)

Aqui estão alguns exemplos de definições de inteiro:

int32 price = 25; // signed 32 bit integer
uint256 balance = 1000; // unsigned 256 bit integer

balance - price; // 975
2 * price; // 50
price % 2; // 1

Boolianos

Os boolianos são definidos usando a palavra-chave bool. Eles sempre têm um valor de true ou false.

Veja como eles podem ser definidos:

bool forSale; //true if an item is for sale
bool purchased; //true if an item has been purchased

Os boolianos são comumente usados em instruções de comparação. Por exemplo:

if(balance > 0 & balance > price) {
    return true;
}

if(price > balance) {
    return false;
}

Os boolianos também podem ser usados em parâmetros de função e tipos de retorno.

function buy(int price) returns (bool success) {
    // ...
}

Literais de cadeia de caracteres

String literals também são usados na maioria dos arquivos de contrato. Eles são caracteres ou palavras entre aspas duplas ou simples.

    String shipped = "shipped"; // shipped
    String delivered = 'delivered'; // delivered
    String newItem = "newItem"; // newItem

Além disso, os seguintes caracteres de escape podem ser usados com string literals.

  • \<newline> ignora uma nova linha
  • \n nova linha
  • \r retorno de carro
  • \t tabulação

Endereço

Um endereço é um tipo com um valor de 20 bytes que representa uma conta de usuário do Ethereum. Esse tipo pode ser um address regular ou um address payable.

A diferença entre os dois é que um tipo address payable é um endereço para o qual você pode enviar Ether e que contém os membros adicionais transfer e send.

address payable public seller; // account for the seller
address payable public buyer; // account for the user

function transfer(address buyer, uint price) {
    buyer.transfer(price); // the transfer member transfers the price of the item
}

Enumerações

No Solidity, você pode usar enumerações para criar um tipo definido pelo usuário. Ele é chamado de definido pelo usuário porque a pessoa que cria o contrato decide quais valores incluir. As enumerações podem ser usadas para apresentar muitas opções selecionáveis, uma das quais é obrigatória.

Uma enumeração pode ser usada, por exemplo, para apresentar status diferentes para um item. Você pode considerar enumerações como a representação de respostas de várias opções em que todos os valores são predefinidos e você precisa selecionar um. Enumerações podem ser declaradas em definições de contrato ou de biblioteca.

enum Status { 
    Pending,
    Shipped,
    Delivered 
}

Status public status;

constructor() public {
    status = Status.Pending;
}