Pergunta

Eu li esta resposta e os seus comentários e estou curioso para saber:Existem quaisquer razões para a não utilização de this / Self / Me ?

BTW:Me desculpe se isto foi perguntado antes, parece que é impossível de pesquisa para a palavra this sobre ISSO.

Foi útil?

Solução

Aviso: Resposta puramente subjetiva abaixo.

Eu acho que a melhor "razão" para não usar isso/eu/eu é a brevidade. Se já é uma variável/função de membro, por que adicionar redundantemente o prefixo?

Pessoalmente, evito o uso deste/eu/eu, a menos que seja necessário desambiguar uma expressão específica para o compilador. Muitas pessoas discordam disso, mas eu nunca tive um ponto real em nenhum grupo em que trabalhei.

Outras dicas

Eu acho que a maioria dos cenários comuns foi abordada nos dois posts já citados; Principalmente brevidade e redundância vs clareza - uma pequena adição: em c#, é necessário usar "isso" para acessar um "método de extensão" para o tipo atual - ou seja,

this.Foo();

Onde Foo() é declarado externamente como:

public static void Foo(this SomeType obj) {...}

Ele esclarece em alguns casos, como este exemplo em C#:

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}

Se você usar o Stylecop com todas as regras, isso faz você colocar o this. em. Desde que comecei a usá -lo, acho que meu código é mais legível, mas isso é preferência pessoal.

Eu acho que isso não é um problema, porque apenas adiciona mais legibilidade ao código, o que é uma coisa boa.

Para alguns idiomas, como o PHP, é mesmo obrigatório prefixar com $ this-> se você precisar usar campos ou métodos de classe.

Não gosto do fato de que isso torna algumas linhas desnecessariamente mais longas do que poderiam ser, se o PHP tivesse uma maneira de fazer referência a membros da classe sem ela.

Eu pessoalmente acho isso this.whatever é menos legível. Você pode não notar a diferença em um método de 2 linhas, mas espere até obter this.variable e this.othervariable em todos os lugares de uma aula.

Além disso, acho que o uso de this. foi encontrado como um substituto para uma parte da notação húngara muito odiada. Algumas pessoas por aí descobriram que ainda é mais claro para o leitor ver que uma variável é um membro da classe e this. fez o truque. Mas por que nos enganar e não usar o velho e simples "m_" ou simplesmente "_" Para isso, se precisarmos da clareza extra? São 5 caracteres vs. 2 (ou mesmo 1). Menos digitação, o mesmo resultado.

Dito isto, a escolha do estilo ainda é uma questão de preferência pessoal. É difícil convencer alguém a ler o código de uma certa maneira que é útil para alterá -lo.

bem, o eclipse faz campos de cor, os argumentos e as variáveis locais em diferentes cores, para que, pelo menos, a trabalhar no eclipse ambiente não é necessário sintaticamente distinguir campos e especialmente marcá-los como "campos" para si e para as gerações vindouras.

Foi perguntado antes, na verdade, no contexto "variável em java":

Você prefixo sua variável de instância com 'this' em java?

A principal razão recorrente parece ser:

"Isso aumenta o ruído visual que você precisa peneirar para encontrar o significado do código".

Legibilidade, em outra palavra ... que eu não compro, encontro this. muito útil.

Isso soa como bobagem para mim. Usar 'This' pode tornar o código melhor e não vejo problemas com ele. Políticas como essa são estúpidas (pelo menos quando você nem diz às pessoas por que elas estão no lugar).

'isto.' Em código, sempre me sugere que o codificador usou o IntelliSense (ou outros equivalentes de IDE) para fazer seu levantamento pesado.

Certamente sou culpado disso, no entanto, por razões puramente vaidade, removo -as depois.

Os únicos outros motivos pelos quais os uso são para qualificar uma variável ambígua (má prática) ou construir um método de extensão

Qualificando uma variável

string name; //should use something like _name or m_name

public void SetName(string name)
{
     this.name = name;
}

Quanto a mim eu uso this para chamar métodos de um objeto instanciado, enquanto self é para um método estático

No vb.net, uma das práticas comuns que eu uso é o seguinte código:

Class Test
    Private IntVar AS Integer
    Public Function New(intVar As Integer)
       Me.Intvar = intvar
    End Function    
End Class

Nem o tempo todo, mas principalmente eu / este / eu é bastante útil. Esclarece o escopo que você está falando.

Em um método típico de setter (retirado da resposta de Lagerdalek):

string name;

public void SetName(string name)
{
     this.name = name;
}

Se você não o usasse, o compilador não saberia que você estava se referindo à variável do membro.
O uso de this. é dizer ao compilador que você precisa acessar uma variável de membro - que está fora do escopo imediato do método. Criar uma variável dentro de um método com o mesmo nome que uma variável de membro é perfeitamente legal, como substituir um método em uma classe que estendeu outra classe é perfeitamente legal.
No entanto, se você ainda precisar usar o método da super classe, você usa super. Na minha opinião, usando isso. não é pior do que usar super. e permite o programador mais flexibilidade em seu código.

No que me diz respeito, a legibilidade nem sequer entra nele, tudo sobre acessibilidade de suas variáveis.

No final, é sempre uma questão de escolha pessoal. Pessoalmente, eu uso esta convenção de codificação:

public class Foo
{
  public string Bar
  {
    get
    {
      return this.bar;
    }
    /*set
    {
      this.bar = value;
    }*/
  }
  private readonly string bar;

  public Foo(string bar)
  {
    this.bar = bar;
  }
}

Então, para mim, "isso" é realmente necessário para manter o construtor legível.

EDIT: O mesmo exemplo foi publicado por "Sinje" enquanto eu estava escrevendo o código acima.

Não apenas uso "isso" frequentemente. Às vezes eu uso "isso".

class Foo
{
    private string bar;

    public int Compare(Foo that)
    {
        if(this.bar == that.bar)
        {
            ...

E assim por diante. "Isso" no meu código geralmente significa outra instância da mesma classe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top