Quais são os benefícios de prefixar nomes de parâmetros de função com p *?


22

Costumo ver projetos (em projetos Java e equipes usando Eclipse) que prefixam parâmetros de função p.

Por exemplo

public void filter (Result pResult) ...

Pessoalmente, não vejo nenhum benefício nisso, mas gostaria de saber qual é o raciocínio. A melhor explicação que ouvi até agora é que é para distinguir o nome de campos nomeados idênticos. Tenho meus problemas com essa explicação, mas posso entender o ponto.

Respostas:


34

As práticas de adição de prefixos significativos a símbolos, como a notória publicação húngara , datam dos tempos em que os IDEs não existiam ou eram muito primitivos. Hoje, quando encontrar um ponto de declaração está a um clique de mouse, não faz sentido estragar a parte mais preciosa do nome, suas primeiras letras, atribuindo um prefixo comum.


10
A notação húngara de sistemas é uma prática terrível que deve ser evitada. Por outro lado, algumas notações em húngaro do Google Apps podem ser úteis (por exemplo, para impedir que entradas inseguras do usuário sejam usadas indevidamente).
Casey Kuball 17/08/2012

7
@ Darthfett: Mesmo esse tipo de notação húngara parece estar tentando implementar um sistema de tipo manual ad-hoc diretamente nos nomes das variáveis. Basta usar uma boa linguagem de tipo estaticamente e fazer com que um sistema de tipo real rastreie coisas assim automaticamente para você!
Tikhon Jelvis 17/08/2012

1
O @WyattBarnett Systems Hungarian não fornece ao programador nenhuma informação útil com os IDEs modernos. Os aplicativos húngaros podem reduzir dores de cabeça nas revisões de código quando aplicadas corretamente.
Casey Kuball 17/08/2012

2
@TikhonJelvis Nem todos os idiomas suportam typedefs que são fortemente aplicados (por exemplo, C ++ typdefs ). Para os idiomas que o suportam, você está certo.
Casey Kuball 17/08/2012

4
@ Darthfett: Em C / C ++, você pode simplesmente envolvê-lo em struct/ unioncom um elemento.
Maciej Piechotka

9

Como você suspeita, é para evitar colisões de nomes entre o nome do parâmetro e os nomes de variáveis ​​locais ou de membros. Às vezes, as variáveis ​​membros recebem um prefixo pelo mesmo motivo (por exemplo, m_result). Pessoalmente, prefiro usar o thisprefixo para variáveis ​​de membro se houver uma colisão de nome. Está embutido no idioma e todo mundo já sabe o que significa.


É isso que eu faço. Não usar um prefixo também ajuda no Eclipse ao chamar o método. Se você construiu sua árvore de objetos e nomeou as variáveis ​​como os nomes dos parâmetros do método que você deseja chamar, funcionará como um encanto, mas se os nomes dos parâmetros forem prefixados, isso não funcionará.
Oschrenk

5

Eu só uso um prefixo de parâmetro quando o parâmetro se destina a ser atribuído a uma variável de membro, como um construtor ou um setter.

Paint (newColor) {
  color = newColor;
}

Para mim, acho que usar um nome de variável diferente é mais óbvio do que usar o prefixo "this".

Para outras situações, evito usar um parâmetro que possa ser facilmente confundido com uma variável de membro.

Se um método ou classe é tão grande que é difícil dizer o que as variáveis ​​significam, a solução real é dividi-lo em métodos / classes menores. O uso de prefixos é uma solução de band-aid que resolve o problema subjacente.


Pessoalmente, prefiro abreviar o nome do parâmetro nesse caso (por exemplo, Paint (clr) { color = clr; }). ... Geralmente não há muita ambiguidade, embora color -> clrem particular possa ser uma exceção.
Justin Time 2 Restabelece Monica

1

Se você definir um padrão para usar 'p' como prefixo com o nome de cada parâmetro do método, poderá reconhecer facilmente os parâmetros do método no restante do corpo do método.

Isso economiza seu tempo para encontrar os parâmetros do método. Você pode depurar seu código facilmente.


1
Se você não conseguir dizer o que é um parâmetro e o que não é - seu método provavelmente está escrito mal. Talvez seja muito longo ou use muitas variáveis ​​não estruturadas? De qualquer maneira, parece um problema diferente solucionado pela adição de prefixos desnecessários.
jakubiszon 19/03

1

Curto - Essa prática dificulta a leitura do código.

Longo - argumentarei que é uma prática ruim usada apenas para apoiar outras práticas ruins. Vamos examinar algumas razões pelas quais o uso desses prefixos pode ser considerado útil:

  • Evitando colisões em nomes de variáveis

    • Os nomes dos seus parâmetros expressam exatamente quais são os parâmetros? Se você possui um campo de parâmetro e classe "exatamente o mesmo", não precisa de um parâmetro.
    • Nesse caso, só faz sentido usar prefixos para construtores de classe como o novo prefixo * descrito na resposta de Aaron. Também pode ser útil para métodos de incubação, por exemplo

    public void setHeight(int newHeight) { this.height = newHeight; }

  • Os métodos usam muitos parâmetros, declaram muitas variáveis ​​e podemos facilmente esquecer qual deles é um parâmetro.

    • Como descrito acima - o problema está no número de variáveis.
    • O programa provavelmente não está bem estruturado. Verifique se todas as variáveis ​​são "independentes" - talvez elas devam ser organizadas em estruturas ou classes. Talvez todo o cálculo ou processo deva ser agrupado em uma classe separada apenas para operar com esse número de variáveis.
    • Mesmo que você precise desse número de variáveis ​​- elas devem usar nomes significativos e o prefixo está entre você e a parte significativa.
  • Os métodos são muito longos e você precisa usar prefixos para acompanhar o que é um parâmetro.
    • O problema está no comprimento dos métodos - Se um programa for bem escrito, você sempre verá o cabeçalho do método e todo o seu corpo em uma única tela.
    • Tente dividir o método em blocos menores.

Exceto em alguns casos específicos, a adição de prefixos de parâmetros ajuda apenas com sintomas e não resolve problemas reais.


0

Sou fã do iParam para dentro e oParam para fora dos parâmetros. Eu diria cParam para a mudança, mas isso não é aceitável


2
Você poderia explicar por que você é fã desse prefixo, o que você ganha ao usá-lo?
Peter Peter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.