62 lines
2.3 KiB
Solidity
62 lines
2.3 KiB
Solidity
|
/**
|
||
|
Armazenamento é Caro
|
||
|
|
||
|
Uma das operações mais caras em Solidity é usar o storage (armazenamento) - particularmente escrever.
|
||
|
|
||
|
Isto porque toda vez que você escreve uma mudança em um pedaço de dado,
|
||
|
ela escreve permanentemente na blockchain.
|
||
|
Para sempre! Milhares de nós em todo o mundo precisam guardar esse dados em seus discos rígidos,
|
||
|
e esta quantidade de dado continua crescendo continuamente com o tempo conforme o blockchain cresce.
|
||
|
Então há um custo para isso.
|
||
|
|
||
|
E para manter os custos baixos, você precisa evitar escritas de dados no storage
|
||
|
armazenamento exceto quando absolutamente necessário.
|
||
|
Algumas vezes envolve uma lógica de programação ineficiente -
|
||
|
como reconstruir um array em memory (memória) toda vez que a função é chamada ao
|
||
|
invés de simplesmente salvar o array em uma variável para buscas rápidas.
|
||
|
|
||
|
Na maioria das linguagens, percorrer grande quantidade de dados é caro.
|
||
|
Mas em Solidity, esta é a maneira mais barata do que usar storage se estiver
|
||
|
em uma função external view, uma vez que funções view não custam qualquer gas
|
||
|
para os seus usuários.
|
||
|
(E gas custa dinheiro real para os seus usuários!).
|
||
|
|
||
|
Iremos aprender os laços for no próximo capítulo, mas primeiro, vamos ver como declarar listas em memória.
|
||
|
Declarando listas em memória
|
||
|
Você pode usar a palavra reservada memorycom arrays (litas) para criar um novo
|
||
|
array dentro da função sem precisar do storage para nada.
|
||
|
O array só existirá até o fim da função, e isto é um muito mais barato que atualizar
|
||
|
um array em storage - de graça se for uma função view chamada externamente.
|
||
|
|
||
|
Aqui esta como declarar uma lista em memória:
|
||
|
*/
|
||
|
|
||
|
function getArray() external pure returns(uint[]) {
|
||
|
// Estancia um novo array em memory com o tamanho de 3
|
||
|
uint[] memory values = new uint[](3);
|
||
|
|
||
|
// Adiciona alguns valores
|
||
|
values.push(1);
|
||
|
values.push(2);
|
||
|
values.push(3);
|
||
|
|
||
|
// Retorna o array
|
||
|
return values;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Este é um exemplo trivial para somente mostrar para você a sintaxe,
|
||
|
mas no próximo capítulo iremos ver como combinar este laço for em casos reais.
|
||
|
|
||
|
Nota: Arrays em memória precisam ser criados com argumento de tamanho (neste caso 3).
|
||
|
Atualmente não podem ser redimensionados como arrays em storage com o array.push(),
|
||
|
apesar de que isto pode mudar em uma futura versão do Solidity.
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|