Quali sono i vantaggi del prefisso dei nomi dei parametri delle funzioni con p *?


22

Vedo spesso progetti (in progetti e team Java che utilizzano Eclipse) con prefisso i parametri della funzione p.

Per esempio

public void filter (Result pResult) ...

Personalmente non vedo alcun vantaggio in questo, ma vorrei sapere qual è il ragionamento. La migliore spiegazione che ho sentito ancora è che è di distinguere il nome di campi identici. Ho i miei problemi con quella spiegazione, ma posso capire il punto.

Risposte:


34

Le pratiche di aggiunta di prefissi significativi ai simboli, come la ben nota Notazione ungherese , risalgono ai tempi in cui gli IDE non esistevano o erano troppo primitivi. Oggi, quando trovare un punto di dichiarazione è un clic del mouse, non ha senso rovinare la parte più preziosa del nome, le sue prime lettere, assegnando un prefisso comune.


10
La notazione ungherese di sistemi è una pratica terribile che dovrebbe essere evitata. D'altra parte, alcune app ungheresi possono essere utili (ad esempio per impedire che un input utente non sicuro venga utilizzato in modo improprio).
Casey Kuball,

7
@Darthfett: anche quel tipo di notazione ungherese sembra cercare di implementare un sistema di tipo manuale ad hoc direttamente nei nomi delle variabili. Basta usare un buon linguaggio tipicamente statico e avere un sistema di tipo reale per tracciare automaticamente cose del genere per te!
Tikhon Jelvis,

1
@WyattBarnett Systems Ungherese non fornisce al programmatore alcuna informazione utile con gli IDE moderni. Le app ungheresi possono ridurre il mal di testa nelle revisioni del codice quando vengono applicate correttamente.
Casey Kuball,

2
@TikhonJelvis Non tutte le lingue supportano i typedef che sono fortemente applicati (es. Typdefs C ++ ). Per le lingue che lo supportano, hai ragione.
Casey Kuball,

4
@Darthfett: in C / C ++ puoi semplicemente avvolgerlo in struct/ unioncon un elemento.
Maciej Piechotka,

9

Come sospetti, è per evitare collisioni di nomi tra il nome del parametro e i nomi delle variabili locali o membri. A volte alle variabili membro viene assegnato un prefisso per lo stesso motivo (ad esempio, m_result). Personalmente, preferisco usare il thisprefisso solo per le variabili membro in caso di collisione del nome. È integrato nella lingua e tutti sanno già cosa significa.


Questo è quello che faccio. Non usare un prefisso aiuta anche in Eclipse quando si chiama il metodo. Se hai creato la struttura ad albero degli oggetti e dai un nome alle variabili come i nomi dei parametri del metodo che desideri invocare, funziona come un incantesimo, ma se i nomi dei parametri hanno il prefisso non funziona.
Oschrenk,

5

Uso un prefisso di parametro solo quando il parametro deve essere assegnato a una variabile membro, ad esempio un costruttore o un setter.

Paint (newColor) {
  color = newColor;
}

Per me, trovo che usare un nome di variabile diverso sia più ovvio che usare il prefisso "this".

Per altre situazioni, evito di utilizzare un parametro che potrebbe essere facilmente confuso con una variabile membro.

Se un metodo o una classe è così grande che è difficile dire cosa significano le variabili, la vera soluzione è dividerla in metodi / classi più piccoli. L'uso dei prefissi è una soluzione di cerotto che risolve il problema sottostante.


Personalmente, preferisco abbreviare il nome del parametro in quel caso (ad es Paint (clr) { color = clr; }.). ... Di solito non c'è molta ambiguità, anche se color -> clrin particolare può essere un'eccezione.
Justin Time - Ripristina Monica il

1

Se si crea uno standard per utilizzare 'p' come prefisso con ciascun nome di parametro del metodo, è possibile riconoscere facilmente i parametri del metodo nel resto del corpo del metodo.

Ti fa risparmiare tempo per trovare i parametri del metodo. È possibile eseguire il debug del codice facilmente.


1
Se non sei in grado di dire cosa è un parametro e cosa no, probabilmente il tuo metodo è stato scritto male. Forse è troppo lungo o usa troppe variabili non strutturate? Ad ogni modo sembra un problema diverso risolto aggiungendo prefissi non necessari.
Jakubiszon,

1

Breve: questa pratica rende il codice più difficile da leggere.

Lungo: sosterrò che è una cattiva pratica usata solo per supportare altre cattive pratiche. Esaminiamo un paio di motivi per cui l'utilizzo di tali prefissi potrebbe essere considerato utile:

  • Evitare le collisioni nei nomi delle variabili

    • I nomi dei parametri esprimono esattamente quali sono i parametri? Se hai un parametro e un campo di classe che sono "esattamente gli stessi" non hai bisogno di un parametro.
    • In questo caso ha senso utilizzare solo prefissi per i costruttori di classi come il nuovo prefisso * descritto nella risposta di Aaron. Potrebbe anche essere utile per i metodi setter, ad es

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

  • I metodi prendono molti parametri, dichiarano molte variabili e potremmo facilmente dimenticare quale sia un parametro.

    • Come descritto sopra, il problema risiede nel numero di variabili.
    • Il programma probabilmente non è strutturato bene. Controlla se tutte le variabili sono "indipendenti" - forse dovrebbero essere organizzate in strutture o classi. Forse l'intero calcolo o processo dovrebbe essere racchiuso in una classe separata solo per operare su tale numero di variabili.
    • Anche se avevi bisogno di un tale numero di variabili, dovrebbero usare nomi significativi e il prefisso si trova tra te e la parte significativa.
  • I metodi sono molto lunghi ed è necessario utilizzare i prefissi per tenere traccia di ciò che è un parametro.
    • Il problema risiede nella lunghezza dei metodi: se un programma è scritto bene dovresti sempre vedere l'intestazione del metodo e il suo intero corpo su una singola schermata.
    • Prova a dividere il metodo in blocchi più piccoli.

Tranne alcuni casi specifici, l'aggiunta di prefissi di parametri aiuta solo con i sintomi e non risolve i problemi reali.


0

Sono un fan di iParam per in e oParam per i parametri out. Direi cParam per il cambiamento, ma non è accettabile


2
Potresti spiegare perché sei un fan di questo prefisso, cosa guadagni usandolo?
Peter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.