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

15

Sto guardando il prossimo Visual Studio 2017 .

Nella sezione Incremento della produttività è presente un'immagine di Visual Studio utilizzata per sostituire tutte le occorrenze di var con il tipo esplicito.

Il codice apparentemente ha diversi problemi che Visual Studio ha identificato come "ha bisogno di risolvere".

Volevo ricontrollare la mia comprensione dell'uso di var in C #, così ho letto un articolo del 2011 di Eric Lippert chiamato blog Usi e abusi di digitazione implicita .

Eric dice:

  • Use var when you have to; when you are using anonymous types.
  • Use var when the type of the declaration is obvious from the initializer, especially if it is an object creation. This eliminates redundancy.
  • Consider using var if the code emphasizes the semantic “business purpose” of the variable and downplays the “mechanical” details of its storage.
  • Use explicit types if doing so is necessary for the code to be correctly understood and maintained.
  • Use descriptive variable names regardless of whether you use “var”. Variable names should represent the semantics of the variable, not details of its storage; “decimalRate” is bad; “interestRate” is good.

Penso che la maggior parte dell'uso 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% di che tipo sia, ma anche in quel momento so abbastanza rapidamente che è un boolean .

L'utilizzo di 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 basato su ciò che Eric dice che la variabile dovrebbe probabilmente essere tweets piuttosto che listOfTweets .

Quale sarebbe la ragione per cambiare tutto il var da usare qui? C'è qualcosa di sbagliato in questo codice che mi manca?

    
posta Rowan Freeman 03.01.2017 - 02:15
fonte

2 risposte

25

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

Se installi VS2017 RC e apri il pannello Opzioni e vai a Text Editor -> C# , vedrai una nuova sezione: Code Style . Questo è simile a ciò che ReSharper ha offerto per un po ': una serie di regole configurabili per gli stili di codifica.

Include tre opzioni attorno all'uso di var : per i tipi di build-in, quando il tipo di variabile è apparente e "Altrove". In ogni caso, puoi specificare "preferisci tipo esplicito" o "preferisci var" e imposta il livello di notifica su "nessuno", "suggerimento", "avviso" o "errore":

    
risposta data 03.01.2017 - 11:12
fonte
6

Penso che tu stia leggendo troppo. Quindi, esiste una funzionalità che consente di sostituire gli usi della digitazione implicita con le annotazioni di tipo esplicito e, da ciò si deduce che la digitazione implicita è scoraggiata. C'è anche una funzione per compilare il bytecode da C♯ a CIL, potresti concludere che C♯ è scoraggiato e dovremmo invece scrivere il 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 doverli compitare. Questo è tutto.

Questo è semplicemente un buon esempio di come mostrare le capacità di comprensione del codice dell'IDE. È piccolo e autonomo (a differenza del mostrare un refactoring più grande), è disponibile in tutte le edizioni e applicabile a tutti gli sviluppatori (a differenza di alcune delle funzionalità di visualizzazione architettoniche certamente molto impressionanti disponibili solo in Ultimate e non applicabili a una porzione significativa dei potenziali utenti di VS che non avranno mai progetti così grandi), e sebbene sia molto semplice (sta facendo esattamente la stessa cosa che csc.exe ha fatto fin da quando è stato introdotto var ), sicuramente è impressionante, specialmente per qualcuno che non capisce veramente la tipizzazione implicita e l'inferenza di tipo (o che cerca di "tipo di inferenza" di google e viene sommersa da termini come Hindley-Milner, unificazione, backtracking, quando in realtà l'inferenza locale di C♯ è estremamente semplice e diretto).

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

    
risposta data 03.01.2017 - 11:49
fonte

Leggi altre domande sui tag