Microsoft sta scoraggiando l'uso di 'var' in C #? (VS2017)


15

Sto guardando il prossimo Visual Studio 2017 .

Nella sezione intitolata Boosted Productivity c'è un'immagine di Visual Studio utilizzata per sostituire tutte le occorrenze di var con il tipo esplicito.

aumento della produttività VS2017

Apparentemente il codice presenta diversi problemi che Visual Studio ha identificato come "da correggere".

Volevo ricontrollare la mia comprensione dell'uso di var in C #, quindi ho letto un articolo del 2011 di Eric Lippert intitolato Usi e abusi della tipizzazione implicita .

Eric dice:

  • Usa var quando devi; quando si utilizzano tipi anonimi.
  • Utilizzare var quando il tipo di dichiarazione è evidente dall'inizializzatore, specialmente se si tratta di una creazione di oggetti. Questo elimina la ridondanza.
  • Prendi in considerazione l'uso di var se il codice enfatizza lo "scopo commerciale" semantico della variabile e minimizza i dettagli "meccanici" della sua memoria.
  • Utilizzare tipi espliciti se è necessario farlo per comprendere e conservare correttamente il codice.
  • Utilizzare nomi di variabili descrittivi indipendentemente dal fatto che si usi "var". I nomi delle variabili dovrebbero rappresentare la semantica della variabile, non i dettagli della sua memorizzazione; "DecimalRate" è errato; "InterestRate" è buono.

Penso che la maggior parte dell'utilizzo var nel codice sia probabilmente ok. Penso che sarebbe ok non usare var per il bit che legge ...

var tweetReady = workouts [ ... ]

... perché forse non è immediato al 100% che tipo sia, ma anche allora so abbastanza rapidamente che è un boolean.

L' uso var per questa parte ...

var listOfTweets = new List<string>();

... mi sembra esattamente un buon uso di var perché penso che sia ridondante fare quanto segue:

List<string> listOfTweets = new List<string>();

Sebbene sulla base di ciò che Eric dice, la variabile dovrebbe probabilmente essere tweet piuttosto che listOfTweets .

Quale sarebbe la ragione per cambiare tutto l' varuso qui? C'è qualcosa di sbagliato in questo codice che mi manca?


Il codice nello screenshot è esattamente il genere di cose che sei d'accordo non dovresti usare var ... Chiarimento?
Telastyn,

1
Penso che tutti gli usi di varqui vadano bene. Potresti cambiarne uno, ma anche allora penso che non sia davvero necessario. Perché cambiarli tutti in tipo esplicito?
Rowan Freeman,

2
Tieni presente che ciò che è ovvio per gli umani non è sempre ovvio per Visual Studio.
candied_orange,

Tutti? Nell'immagine è presente un errore chiaramente correlato a var.
Telastyn,

Beh, non è un errore in quanto tale, ma piuttosto un avvertimento del tipo che ti aspetteresti che una linter sottolinei. Secondo l'immagine, tutti varssono stati contrassegnati allo stesso modo; con la stessa croce ammonitrice accanto a loro e una sottolineatura rossa. Presumibilmente Visual Studio vuole correggerli tutti allo stesso modo. A meno che non mi sbagli.
Rowan Freeman,

Risposte:


26

TL; DR: no, Microsoft non scoraggia l'uso di 'var' in C #. L'immagine è semplicemente priva di contesto per spiegare perché si lamenta.

Se si installa VS2017 RC e di aprire il pannello Opzioni e andare Text Editor -> C#, vedrete una nuova sezione: Code Style. Questo è simile a quello che ReSharper ha offerto per un po ': un insieme di regole configurabili per gli stili di codifica.

Include tre opzioni sull'uso di var: per i tipi predefiniti, quando il tipo di variabile è evidente e "Altrove". In ogni caso, puoi specificare "preferisci tipo esplicito" o "preferisci var" e impostare il livello di notifica su "nessuno", "suggerimento", "avviso" o "errore":

inserisci qui la descrizione dell'immagine


3
Qual è l'impostazione predefinita? Se l '"impostazione di fabbrica" ​​è "Preferisci tipo esplicito", si potrebbe obiettare che MS sta scoraggiando l'uso di var.
Jacques,

@JacquesB, le impostazioni predefinite sono come mostrato nella schermata. Poiché tutti sono impostati su "Nessuno", è difficile sapere se "Preferisci tipo esplicito" è impostato attivamente come metodo preferito da MS o se si tratta solo del "valore zero". Per quanto mi riguarda, i migliori sviluppatori preferiscono tutti var, quindi non mi interessa molto quali siano le opinioni degli Stati membri su questo argomento.
David Arno,

6

Penso che stai leggendo troppo. Pertanto, esiste una funzione che consente di sostituire gli usi della digitazione implicita con annotazioni di tipo esplicite e, da ciò, si conclude che la digitazione implicita è scoraggiata. C'è anche una funzione per compilare il bytecode da C♯ a CIL, ne trarresti da ciò che C♯ è scoraggiato e dovremmo invece scrivere tutti bytecode CIL? Probabilmente no.

Microsoft sta semplicemente mostrando la profonda comprensione che l'IDE ha del tuo codice. Può persino scrivere i tuoi tipi per te senza che tu debba scriverli. Questo è tutto.

Questo è semplicemente un buon esempio di mostrare le capacità di comprensione del codice dell'IDE. È piccolo e autonomo (a differenza di un refactoring più grande), è disponibile in tutte le edizioni e applicabile a tutti gli sviluppatori (a differenza di alcune delle caratteristiche di visualizzazione architettonica davvero impressionanti che sono disponibili solo in Ultimate e non applicabili a una parte significativa dei potenziali utenti di VS che non avranno mai progetti così grandi), e sebbene sia molto semplice (sta letteralmente facendo la stessa cosa che csc.exefa da alloravarè stato introdotto), sembra certamente impressionante, specialmente per qualcuno che non capisce davvero la digitazione implicita e l'inferenza del tipo (o che cerca di google "inferenza del tipo" e viene sopraffatto da termini come Hindley-Milner, unificazione, backtracking, quando in realtà L'inferenza solo locale di C♯ è estremamente semplice e diretta).

Quindi, in breve: è un modo appariscente di mostrare una funzione IDE.

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.