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!