Denominazione dei parametri di tipo in java [closed]

1

Sappiamo tutti che è bene usare nomi di identificatori descrittivi. Tuttavia, la convenzione in Java è di usare una singola lettera per un identificatore di parametro di tipo. La maggior parte delle persone predefinite è T , ma se hai a che fare con elementi in una raccolta, spesso vedi E . Ora capisco come sia sensato usare identificatori a lettera singola per i parametri di tipo illimitato, dal momento che possono davvero essere qualsiasi cosa, quindi non ci sono informazioni che devono essere rappresentate dall'identificatore.

Ma supponiamo che tu abbia due parametri di tipo limitato, ad esempio T extends Iterable<Integer> e S extends Consumer<Integer> , non avrebbe più senso utilizzare identificatori più descrittivi di T o S in modo da non confonderli? Potresti essere in grado di farla franca usando, diciamo, I e C , ma le persone non sarebbero mai (nel mio mondo ideale) essere così concise con gli identificatori di variabili. Quindi, perché le persone sono così concise con gli identificatori dei parametri di tipo? Oppure la convenzione di identificatori di parametri di tipo a singolo carattere non è così pervasiva come immagino?

    
posta Brian Moths 02.02.2014 - 19:13
fonte

1 risposta

6

C'è qualche merito ai parametri di tipo a lettera singola

  1. Sono brevi, il che è una fortuna quando i parametri di tipo vengono visualizzati in molti punti quando si scrive codice generico.
  2. Sono effettivamente in uno spazio dei nomi diverso dalle classi effettive.

Naturalmente, il mio primo punto è discutibile visto che a Java non interessa molto la concisione. Ma il secondo punto evita un vero problema. Considera questa parte di codice:

Entry<Key, Value> e = new Entry<>(...);

Vorrei iniziare a cercare le interfacce o le classi Entry , Key e Value che non porterebbero da nessuna parte a poche centinaia di righe prima, tutte queste sono state dichiarate come parametri tipo. Ma nessun programmatore Java si aspetterebbe mai che E<K, V> faccia riferimento alle classi effettive.

Se non vogliamo usare la convenzione di denominazione di lettere maiuscole, allora dobbiamo rinunciare alla discernibilità dei tipi effettivi e dei parametri di tipo, oppure possiamo passare ad un'altra convenzione, ad es. usando la notazione ungherese. Quindi, IFoo , CFoo e PFoo farebbero chiaramente riferimento a diversi tipi di tipi.

Questa non è una soluzione utilizzabile in quanto i tipi Java integrati non seguono tale convenzione. Per ragioni di uniformità è probabilmente meglio attenersi a una soluzione subottimale ma diffusa piuttosto che inventare la propria.

L'importanza dei parametri del tipo di denominazione può anche essere sottovalutata, ed è abbastanza possibile comprenderne il significato dato un contesto e una documentazione sufficiente.

    
risposta data 02.02.2014 - 19:40
fonte

Leggi altre domande sui tag