Dovrei *sempre* favorire le variabili locali tipizzate implicitamente in C# 3.0?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

Domanda

Riaffilatore certamente la pensa così, e fuori dagli schemi ti tormenterà per convertirti

Dooberry dooberry = new Dooberry();

A

var dooberry = new Dooberry();

È davvero considerato lo stile migliore?

È stato utile?

Soluzione

Ovviamente è una questione di stile, ma sono d'accordo con Dare: Dichiarazioni di tipo implicite C# 3.0:Var o non Var?.Penso che l'uso di var invece di un tipo esplicito renda il tuo codice meno leggibile. Nel seguente codice:

var result = GetUserID();

Qual è il risultato?Un int, una stringa, un GUID?Sì, è importante e no, non dovrei scavare nel codice per saperlo.È particolarmente fastidioso negli esempi di codice.

Jeff ha scritto un post su questo, dicendo preferisce la var.Ma quel ragazzo è pazzo!

Vedo un modello per il successo dello stackoverflow:recupera vecchi post di CodingHorror e (in stile Jeopardy) formulali in termini di domanda.

Altri suggerimenti

Lo uso solo quando è chiaramente ovvio cosa sia var.

mi è chiaro:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

non mi è chiaro:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

Il miglior riassunto della risposta che ho visto è Il commento di Eric Lippert, che in sostanza dice che dovresti usare il tipo concreto se è importante quale sia il tipo, ma non altrimenti.Essenzialmente le informazioni sul tipo dovrebbero essere riservate ai luoghi in cui il tipo è importante.

Lo standard nella mia azienda è utilizzare var ovunque, a cui siamo arrivati ​​dopo leggere vari consigli e poi dedicare un po' di tempo a provarli per vedere se la mancanza di informazioni sul tipo annotato è stata un aiuto o un ostacolo.Abbiamo pensato che fosse un aiuto.

La maggior parte delle raccomandazioni a cui le persone si sono collegate (ad es.Dare's one) sono raccomandazioni fatte da persone che non hanno mai provato a scrivere codice usando var invece del tipo concreto.Ciò rende le raccomandazioni quasi inutili, perché non parlano per esperienza, ma semplicemente estrapolano.

Il miglior consiglio che posso darti è provarlo tu stesso e vedere cosa funziona per te e il tuo team.

@jongalloway - var non rende necessariamente il tuo codice più illeggibile.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

Il primo è leggibile quanto il secondo e richiede meno lavoro

var myvariable = ResultFromMethod();

qui, hai ragione, var potrebbe rendere il codice meno leggibile.Mi piace var perché se cambio un decimale in un double, non devo cambiarlo in un sacco di posti (e non dire refactor, a volte me ne dimentico, lasciami solo var!)

MODIFICARE: ho appena letto l'articolo, sono d'accordo.lol.

Ho la sensazione che questa sarà una delle domande più popolari poste nel tempo su Stack Overflow.Si riduce alle preferenze.Qualunque cosa pensi sia più leggibile.Preferisco var quando il tipo è definito sul lato destro perché è più conciso.Quando assegno una variabile da una chiamata al metodo, utilizzo la dichiarazione di tipo esplicita.

C'è stata una bella discussione su questo @ Codificare l'orrore

Personalmente cerco di mantenerne l'utilizzo al minimo, ho scoperto che danneggia la leggibilità soprattutto quando si assegna una variabile da una chiamata al metodo.

Uno dei vantaggi di uno strumento come ReSharper è che puoi scrivere il codice come preferisci e riformattarlo in seguito in qualcosa di più gestibile.Ho impostato R# per riformattare sempre in modo tale che il tipo effettivo in uso sia visibile, tuttavia, quando scrivo il codice digito quasi sempre "var".

I buoni strumenti ti consentono di avere il meglio di entrambi i mondi.

John.

Ha senso solo quando non si conosce il tipo in anticipo.

Lo "stile migliore" è soggettivo e varia a seconda del contesto.

A volte è molto più semplice usare 'var' invece di digitare un nome di classe estremamente lungo o se non sei sicuro del tipo restituito di una determinata funzione.Trovo di utilizzare "var" di più quando si scherza con Linq o nelle dichiarazioni del ciclo for.

Altre volte, utilizzare il nome completo della classe è più utile in quanto documenta il codice meglio di quanto faccia "var".

Sento che spetta allo sviluppatore prendere la decisione.Non esiste una soluzione miracolosa.Nessun "unico vero modo".

Saluti!

No, no Sempre ma direi che la maggior parte delle volte.Le dichiarazioni di tipo non sono molto più utili di quanto lo sia mai stata la notazione ungherese.Hai ancora lo stesso problema che i tipi sono soggetti a modifiche e per quanto gli strumenti di refactoring siano utili per questo non è l'ideale rispetto a non dover modificare il punto in cui un tipo è specificato se non in un unico posto, che segue il Don't Repeat Yourself principio.

Qualsiasi istruzione a riga singola in cui il nome di un tipo può essere specificato sia per una variabile che per il suo valore dovrebbe assolutamente utilizzare var, specialmente quando è una lunga Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>>

C'è un articolo MSDN davvero valido su questo argomento e delinea alcuni casi in cui non è possibile utilizzare var:

Le seguenti restrizioni si applicano alle dichiarazioni di variabili tipizzate in modo implicito:

  • VAR può essere utilizzato solo quando una variabile locale viene dichiarata e inizializzata nella stessa affermazione;La variabile non può essere inizializzata su NULL, o in un gruppo di metodi o una funzione anonima.
  • var non può essere utilizzato sui campi nell'ambito della classe.
  • Le variabili dichiarate utilizzando VAR non possono essere utilizzate nell'espressione di inizializzazione.In altre parole, questa espressione è legale:int i = (i = 20);Ma questa espressione produce un errore a tempo di compilazione:var i = (i = 20);
  • Variabili più implicitamente tipite non possono essere inizializzate nella stessa affermazione.
  • Se un tipo denominato var è in ambito, allora la parola chiave var si risolverà a quel nome di tipo e non verrà trattata come parte di una dichiarazione variabile locale tipizzata implicitamente.

Consiglierei di verificarlo per comprendere tutte le implicazioni dell'utilizzo di var nel codice.

Vedo uno schema per il successo di StackOverflow:Scava i vecchi post di CodingHorror e (stile a rischio) preparali in termini di domanda.

Mi dichiaro innocente!Ma hai ragione, questa sembrava essere una piccola domanda relativamente popolare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top