Perché non usiamo sempre tipi generici invece di preoccuparci di specificare ogni volta?
Questa è un po' una questione religiosa. Il conflitto è tra i linguaggi che associano concettualmente i tipi alle variabili contro quelli che associano i tipi ai valori.
Alcuni linguaggi (notoriamente Lisp e Smalltalk, con molti linguaggi di scripting in questo campo) sono progettati intorno all'idea che le variabili non hanno tipi - esse contengono valori, e solo quei valori hanno tipi. In alcuni di questi linguaggi (in particolare Common Lisp), se avete davvero bisogno di prestazioni, potete annotare il vostro codice per dire al compilatore quali tipi di valori vi aspettate nel vostro codice.
Altri linguaggi richiedono che le variabili siano tipizzate. Anche i "tipi generici" spesso non sono veramente generici, nel senso che implicitamente (e in alcuni linguaggi, esplicitamente) richiedono che certe operazioni siano permesse sui valori con cui sono chiamati. Per esempio, "trova in una lista" richiede che il tipo dell'elemento da trovare corrisponda al tipo degli elementi nella lista, e quel tipo deve supportare il test di uguaglianza per essere valido.
Come ha detto Scott Berry, la struttura del vostro codice dovrebbe riflettere il vostro intento.
Se state lavorando in un linguaggio con "variabili tipizzate" (ed è probabile che sia così), allora dovreste sempre specificare il vincolo di tipo più stretto che rifletta ciò che il codice fa, ma non più stretto. Le interfacce o i loro equivalenti sono molto utili se il vostro linguaggio non vi permette di vincolare i vostri parametri generici.
Non solo questo aiuterà il compilatore (che è una preoccupazione secondaria - i compilatori sono abbastanza bravi a risolvere queste cose di questi tempi), ma aiuterà voi e i futuri programmatori a capire l'uso previsto del vostro codice. Se la vostra funzione prende "Equatable, Comparable", allora è chiaro che non si preoccupa di ciò che state passando, ma solo che può essere ordinato.
Articoli simili
- Ogni volta che vedo l'ora, mi mostra sempre l'ora esatta come le 12:00, l'1:00 o le 3:00. Qual è la ragione per cui questo accade con me ogni giorno?
- Qual è la più alta statistica di un Pokemon (qualsiasi statistica, ogni gen, ogni oggetto, ogni trasformazione, ogni abilità)?
- Quanto spesso sarebbe accettabile caricare il tuo smartwatch? Una volta al giorno? Una volta due giorni? Una volta alla settimana? O altre?
- Perché non usiamo i supercapacitori nei telefoni cellulari invece delle batterie?