Olá Walter, tudo bem com você?
Então, aqui temos mais uma dica do Effective Dart
, como ele está mesmo dizendo esse this
, por exemplo da função depósito, é desnecessário, e você ao testar provavelmente percebeu que ocorreu tudo bem
Então vamos supor que a nossa função esteja assim:
void deposita( double valor){
saldo += valor
}
Mas o que é esse shadowing que aparece: "Não acesse membros utilizando this a não ser que esteja evitando shadowing
void deposito( double saldo){
Só mudei o nome do parâmetro de valor
para saldo
, e agora eu te pergunto, como fazer a mesma operação que temos dentro da função?
Sera que?
saldo += saldo
Bem, mas qual saldo
é o valor que recebo da função, e qual saldo
é o atributo da classe?
Nessa situação entra o shadowing
que é ter duas variáveis com mesmo nome em escopos diferentes, então temos o saldo
que é do escopo da função deposito
e temos saldo
que tem o escopo da classe ContaCorrente
, para conseguir fazer a atribuição precisamos do this
para tirar essa ambiguidade e escapar do shadowing
, pois agora não iremos sobreescrever o valor de uma variável de outro escopo, dado que temos o this
para indicar qual delas se refere a nossa classe
this.saldo = saldo
E nisso entra a questão do this
desnecessário, como o parâmetro da função é valor
e não há nenhuma ambiguidade de variáveis com mesmo nome, podemos simplesmente retirar o this
Vou dar um exemplo de shadowing
onde criamos essa ambiguidade e as consequências:
void main(){
var numero = 30;
int resultado = somaTres(numero);
print(resultado);
}
int somaTres( int valor ){
var valor = 92;
return valor + 3;
}
Aqui novamente temos o shadowing
recebemos uma variável de nome valor
e dentro da nossa função criamos uma com o mesmo nome, e na hora de retornar, quem de fato é valor
?
Aqui como não estamos trabalhando com classe, não há como diferenciar com this
, teremos de fato o shadowing
então o var valor = 92
vai criar uma sombra sobre o int valor
que recebemos, e na hora de retornar teremos o resultado 95
Aqui cabe lembrar que isso são regras de estilo, da maneira como o Timoteo fez está correto, e na verdade é até bem comum em outras linguagens vermos códigos que utilizar o this
mesmo não tendo problemas de shadowing
, mas dentro do Dart é comum seguirmos os padrões do Effective Dart
:)
Essa parte:
E também gostaria de saber o que mudou no dart pra ele considerar automaticamente que a classe que eu faço referência é a classe onde está contida minha operação.
Ficou um pouco confuso, poderia dar um exemplo?
Conseguiu Compreender?
Abraços e Bons Estudos!