Estruturas - Struct

porMatheusem12/05/2022

Nesse artigo iremos abordar o funcionamento do struct, ou em português estruturas, no Solidity.

Struct (Estruturas)

Uma estrutura pode ser definida com a sintaxe struct Nome, dessa forma você pode criar seu próprio objeto com atributos personalizados.

São muito úteis para agrupar dados relacionados.

As estruturas podem ser declaradas fora de um contrato e importados para qualquer outro contrato.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract Todos {
// Declaração de uma struct 'Todo' dentro do contrato
struct Todo {
string text;
bool completed;
}
// Declaração de uma array do tipo 'Todo'
Todo[] public todos;
function create(string calldata _text) public {
// 3 formas de inicializar uma estrutura
// - passando os valores '_text' e 'false' como parâmetro
todos.push(Todo(_text, false));
// passando os valores nas chaves definidas
todos.push(Todo({text: _text, completed: false}));
// inicializando vazio e depois atualizando o valor
Todo memory todo;
todo.text = _text;
// todo.completed - por padrão inicializa como false
todos.push(todo);
}
// Solidity cria automaticamente um getter para objetos da array 'todos' então
// você realmente não precisa dessa função.
function get(uint _index) public view returns (string memory text, bool completed) {
Todo storage todo = todos[_index];
return (todo.text, todo.completed);
// Outra maneira de retornar os valores acima seria:
// return (todos[_index].text, todos[_index].completed);
}
// Atualizando o valor da variável text de um determinado 'todo'
function updateText(uint _index, string calldata _text) public {
Todo storage todo = todos[_index];
todo.text = _text;
}
// Atualizando o valor da variável completed de um determinado 'todo'
function toggleCompleted(uint _index) public {
Todo storage todo = todos[_index];
todo.completed = !todo.completed;
}
}

Declarando e importando uma struct

Arquivo em que a struct é declarada

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// This is saved 'StructTodo.sol'
struct Todo {
string text;
bool completed;
}

Para importarmos a struct, precisamos fazer o import do arquivo que salvamos anteriormente

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "./StructTodo.sol";
contract Todos {
// Uma array de estrutura 'Todo'
Todo[] public todos;
}

Testar no Remix