:?: Observando o Código abaixo, se executado você obtem:343 341 340, todavia existem uma má pratica conhecida como sombreamento.Então o que poderia ser evitado em termos programáticos usando uma melhor prática de desenvolvimento.
:shock: O que acontece ?
class Ruby{
static final long grails=343L;
static long doIt(long grails){
System.out.print(++grails+" ");
return ++grails;
}
public static void main(String[] args){
System.out.print(grails+"");
final long grails = 340L;
new Ruby().doIt(grails);
System.out.println(grails);
}
}
Para evitar sombreamento, você pode usar uma convenção para nomes de parâmetros e variáveis.
Isso não é muito coerente com a filosofia Java, mas pode ser usado na prática.
Eu, por exemplo, sempre começo meus parâmetros por “p” e uso nomes decentes para variáveis, em vez de repetir nomes dos membros da própria classe.
Outro quebra-galho é ficar usando “this.” a torto e a direito, o que eu acho meio smalltalkiano pro meu gosto.
// Evitando o sombreamento usando uma convenção para nomes de parâmetrosprivateinttamanho;publicvoidsetTamanho(finalintpTamanho){tamanho=pTamanho;}// Evitando o sombreamento usando "this" (todos usam mas acho meio gambiarresco)publicvoidsetTamanho(finalinttamanho){this.tamanho=tamanho;}
M
Marcio_Duran
thingol:
Para evitar sombreamento, você pode usar uma convenção para nomes de parâmetros e variáveis.
:?: No exposto acima ao exemplo citado, onde você apontaria o efeito de shadowing, o que você mudaria sem afetar o resultado:
Thanks !!!
:arrow: “O que é o ser , senão o próprio domínio de sua existência pela descoberta do seu conhecimento”
L
LPJava
para evitar o sombreando… basta usar boas praticas… pq vc daria o nome de uma variavel “nota” para tudo? caso tivesse fazendo um boletim? nao é melhor vc criar notaMat por exemplo? e sombreamento dar um trabalho desde do desenvolvimento imagine na manutenção?
S
sergiotaborda
Marcio Duran:
:?: Observando o Código abaixo, se executado você obtem:343 341 340, todavia existem uma má pratica conhecida como sombreamento.Então o que poderia ser evitado em termos programáticos usando uma melhor prática de desenvolvimento.
Sombreamento não é uma má prática é um dos mecanismos de polimorfismo.
Então nada deveria ser feito para evitar sobreamento.
Agora, se vc está inadevertidamente usando sombreamento e não é isso que quer, então, mude os nomes das variáveis ou use this. Ao contrario do que o thingol falou e eu acho muito mais prático usar o mesmo nome e usar o this. Isto porque o codigo fica mais claro e não é necessidade de nenhum tipo de convensão (uma que é particularmente feia é a de usar _ antes dos nomes dos atributos). Também não se devem usar abreviaturas.
A simplicidade dos nomes das suas variáveis torna o codigo mais legivel, isso o torna mais eficaz e diminui a necessidade de comentarios.
M
Marcio_Duran
Eu diria que você se aproximou , mas o thingol fez uma observação genérica.
:arrow: No exposto acima ao exemplo citado, onde você apontaria o efeito de shadowing 8)
:idea: Observação:this representa o objeto sobre o qual esta sendo aplicado um método.this só pode ser usado no corpo de metodos que não são estáticos ou nos contrutores.
:!:[size=18] this[/size] é usado em situações onde pode ocorrer ambiguidade, entre nome de um membro e o nome de um parâmetro formal, variável, etc…
M
Marcio_Duran
Bom, respondendo o exposto acima sobre shadowing.
:arrow: Existe três variáveis long diferentes chamadas grails.Entende-se que você pode aplicar o modificador final a variáveis locais, mas neste caso as duas versão de grails marcadas como final não são modificadas.O único grails cujo o valor se modifica é o que não está marcado com final.
:idea: Em vista de outros casos de shadowing, fica ai essa explicação para este exposto.
L
LPJava
assim cara eu nao consigo, eu ver dando manutencao em um codigo com sombreamento imagine ai 400 linhas de codigo usando sombreamento é coisa de doido…idenpendente do modificador que vc utilizar…
M
Marcio_Duran
:!: Objetivo era apontar o efeito de shadowing.A explicação por idéias ou simbolizar com outros exemplo não objetivaram o que na verdade o exposto tinha por objetivo o entendimento do assunto.Não recomendo tal prática ou contexto baseado nesse cenário.
:idea: Passando variáveis para os métodos
Dica: Os métodos podem usar tipos primitivos e / ou referência a objetos como argumentos.
S
sergiotaborda
então a sua solução é usar final ? LOL
Não se engane. A forma de evitar sobreamento é realmene usar outros nomes (ou usar this).
Entenda que nem sempre é possivel ter variáveis final e pior , vc se confundirá sobre quais têm que ser final.
M
Marcio_Duran
então a sua solução é usar final ? LOL
Não se engane. A forma de evitar sobreamento é realmene usar outros nomes (ou usar this).
Entenda que nem sempre é possivel ter variáveis final e pior , vc se confundirá sobre quais têm que ser final.
sergiotaborda
Virtual Machine Man
:arrow: Sombreamento não é uma má prática é um dos mecanismos de polimorfismo.
Então nada deveria ser feito para evitar sobreamento.
:thumbup: A intenção foi mostrar uma observação sobre shadowing “O único grails cujo o valor se modifica é que não esta marcado com final”, sobre o que é a prática ao desenvolvimento concordo com suas observações, todavia chamei atenção para um outro sentido sobre sombreamento.