11. Struct
Structs são semelhantes a classes, quem já conhece POO sabe do que estou falando. Usando Structs podemos criar um padrão de variáveis a serem usadas pelo smart contract.
# Declarando estrutura
Nesse caso temos um struct chamado Usuário e esse "objeto" usuário é composto pelas seguintes variáveis: um endereço (tipo address), um nome (tipo string) e uma pontuação (tipo uint).
# Instanciando e inserindo dados
Para usar uma estrutura precisamos instancia-la em uma outra variável e passamos os valores para as variáveis contidas na estrutura na hora em que criamos a instância. No exemplo abaixo temos uma função chamada foo e dentro dela instanciamos o struct Usuário dentro da variável usuario1 e usuario2 usando posições implícitas, que nesse caso são o primeiro parâmetro é o endereço, segundo parâmetro é a pontuação e o terceiro parâmetro o nome.
O usuario3 foi instanciado usando dados explícitos, passamos os dados no formato dicionário com chave e valor para indicar em qual variável (chave) será guardado cada dado (valor).
# Ler, Atualizar e Deletar dados
Para deletar dados é como qualquer outra variável, basta colocar o nome da variável que possui um um struct instanciado logo após a palavra delete, como no exemplo abaixo.
Para ler e atualizar acessamos os dados como parâmetros de objetos, ou seja, usando um ponto: " . ", como no exemplo abaixo para acessar o endereço guardado em endereco_wallet que esta_ dentro da struct Usuário instanciada na variável usuario3 nós usamos a instrução_: usuario3.enderecowallet_
# Lista de estruturas
Funciona da mesma forma como outra lista pois quando instanciamos um struct dentro de uma variável estamos criando um tipo de dado e para inseri-lo em um array basta usar o comando nomedoarray.push(variavel_instanciada)
# Dicionário de Estruturas
No exemplo abaixo instanciamos um usuario5 com a estrutura que criamos anteriormente do tipo Usuário e depois guardamos esse usuario5 dentro da chave msg.sender em um dicionario.