Escopo Variável em Solidez

Neste artigo, veremos mais de perto os diferentes escopos de variáveis ​​do Solidity com exemplos e como eles podem ser usados ​​para criar contratos inteligentes mais robustos e seguros .

O escopo da variável refere-se às partes do código onde uma variável pode ser acessada.



Escopo da Variável de Solidez

No Solidity, as variáveis ​​podem ter escopo global ou local . As variáveis ​​globais são declaradas fora de qualquer função e podem ser acessadas de qualquer parte do código.

As variáveis ​​locais, por outro lado, são declaradas dentro de uma função e só podem ser acessadas dentro dessa função.

O escopo local da variável Solidity é limitado à função na qual é definido, mas o escopo de uma variável de estado pode ser dividido em três tipos:

tipos Visão geral
Público Uma variável de estado público pode ser acessada internamente e por meio de mensagens. Getters automáticos são gerados para variáveis ​​de estado públicas.
interno Variáveis ​​de estado só podem ser acessadas internamente a partir do contrato atual ou de contratos dele derivados.
Privado As variáveis ​​de estado privadas só podem ser acessadas de dentro do contrato atual no qual são definidas, não em contratos derivados.

O código a seguir demonstra o funcionamento de variáveis ​​de estado públicas e internas :

Solidity Variable Scope Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
pragma solidity ^0.8.0;
contract SolidityTest{
uint public mrx=30;
uint internal ample=20;
function get_Value_Local_Variable_Contract1() public returns(uint){
// Modifying value of the public State Variable
mrx = 4;
return mrx;
}
}
contract SolidityTest1{
SolidityTest obj=new SolidityTest();
function public_variables_external_value() public view returns(uint){
return obj.mrx(); // Here we make an external access to the public state variable
}
}
contract SolidityTest2 is SolidityTest{
function internal_variables_extended_contract() public returns(uint){
ample=11;
return ample; // Here we make a call to the internall variable value
}
function local_variable_get_value() public pure returns(uint){
uint mrx_1=7;
uint ample_1=6;
uint mrx_multiply_ample=mrx_1*ample_1;
return mrx_multiply_ample; // Returns product of the local variables under the function
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Exemplo 1 Explicação

O exemplo acima consiste em três contratos diferentes, cada um demonstrando diferentes aspectos do Solidity :

O contrato SolidityTest define uma variável de estado pública mrx e uma variável de estado interna ample .

Também define uma função get_Value_Local_Variable_Contract1() que modifica o valor da variável mrx e a retorna.

O contrato SolidityTest1 cria uma instância de SolidityTest usando a palavra-chave new e define uma função public_variables_external_value() que retorna o valor da variável de estado pública mrx do contrato SolidityTest.

O contrato SolidityTest2 herda de SolidityTest e define uma função internal_variables_extended_contract() que modifica o valor da variável de estado interno ample e o retorna. Também define uma função local_variable_get_value() que define as variáveis ​​locais mrx_1 e ample_1, as multiplica e retorna o produto.

Em resumo, este código demonstra os seguintes conceitos do Solidity:

Conceitos Explicação
Variáveis ​​de Estado Os contratos demonstram o uso de variáveis ​​de estado públicas e internas no Solidity. As variáveis ​​públicas podem ser acessadas interna e externamente, enquanto as variáveis ​​internas só podem ser acessadas internamente no contrato e quaisquer contratos herdados dele.
Modificando variáveis ​​de estado As funções get_Value_Local_Variable_Contract1() e internal_variables_extended_contract() modificam o valor das variáveis ​​de estado em seus respectivos contratos.
Acesso externo ao contrato O contrato SolidityTest1 demonstra como criar uma instância de um contrato e acessar sua variável de estado pública de um contrato separado.
Variáveis ​​locais A função local_variable_get_value() demonstra o uso de variáveis ​​locais no Solidity, que são usadas para armazenar dados dentro de uma função e são destruídas quando a função retorna.

Exemplo de escopo de variável de solidez: 2 

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
pragma solidity ^0.8.0;
contract SolidityTest {
uint public mrx=10;
uint internal ample=6;
uint private mr=5;
function get_Public_value() public view returns(uint){
// The line below prints the public variable mrx value inside the contract where it was initialized
return mrx;
}
function get_Internal_value() public view returns(uint){
// Here, we print the value of the internal Variable ample in its parent contract
return ample;
}
function get_Private_value() public view returns(uint){
// Now we print the value of the private variable mr which can not be used except the contract it was created in
return mr;
}
}
contract SolidityTest1{
SolidityTest my_object=new SolidityTest();
function get_public_variable_value_outside() public view returns(uint){
// The value of public variable is accessible in any contract by creating the object of its parent class
return my_object.mrx();
}
}
contract SolidityTest2 is SolidityTest{ // The instance of SolidityTest3 is created with its parent contract named SolidityTest
function get_Internal_Variable_Value() public view returns(uint){
return ample; // Through
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>

Exemplo 2 Explicação

No exemplo acima, o contrato SolidityTest define uma variável de estado pública mrx, uma variável de estado interna ample e uma variável de estado privada mr. Ele também define três funções: get_Public_value(), get_Internal_value() e get_Private_value(), que retornam os valores das variáveis ​​de estado público, interno e privado, respectivamente.

O contrato SolidityTest1 cria uma instância de SolidityTest usando a palavra-chave new e define uma função get_public_variable_value_outside() que retorna o valor da variável de estado pública mrx do contrato SolidityTest. Isso demonstra como acessar variáveis ​​de estado públicas de um contrato de outro contrato.

O contrato SolidityTest2 herda de SolidityTest e define uma função get_Internal_Variable_Value() que retorna o valor da variável de estado interno ample.

Isso demonstra como acessar variáveis ​​de estado internas do contrato pai a partir do contrato filho.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone