¿Microsoft desalienta el uso de 'var' en C #? (VS2017)

15

Estoy viendo el próximo Visual Studio 2017 .

En la sección titulada Boosted Productivity hay una imagen de Visual Studio que se usa para reemplazar todas las apariciones de var con el tipo explícito.

productividad aumentada VS2017

Aparentemente, el código tiene varios problemas que Visual Studio ha identificado como "necesidades de reparación".

Quería verificar mi comprensión del uso de var en C #, así que leí un artículo de 2011 de Eric Lippert llamado Usos y usos incorrectos de la escritura implícita .

Eric dice:

  • Use var cuando sea necesario; cuando usa tipos anónimos.
  • Utilice var cuando el tipo de declaración sea obvio desde el inicializador, especialmente si se trata de una creación de objeto. Esto elimina la redundancia.
  • Considere usar var si el código enfatiza el "propósito comercial" semántico de la variable y minimiza los detalles "mecánicos" de su almacenamiento.
  • Utilice tipos explícitos si es necesario hacerlo para que el código se entienda y mantenga correctamente.
  • Utilice nombres de variables descriptivas independientemente de si utiliza "var". Los nombres de las variables deben representar la semántica de la variable, no los detalles de su almacenamiento; "DecimalRate" es malo; "Tasa de interés" es bueno.

Creo que la mayoría del uso de var en el código probablemente sea correcto. Creo que estaría bien no usar var para el bit que lee ...

var tweetReady = workouts [ ... ]

... porque tal vez no es 100% inmediato de qué tipo es, pero incluso entonces sé con bastante rapidez que es un boolean.

El uso de var para esta parte ...

var listOfTweets = new List<string>();

... me parece exactamente un buen uso de var porque creo que es redundante hacer lo siguiente:

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

Aunque basado en lo que Eric dice, la variable probablemente debería ser tweets en lugar de listOfTweets .

¿Cuál sería la razón para cambiar todo el varuso aquí? ¿Hay algo mal con este código que me falta?

Rowan Freeman
fuente
El código en la captura de pantalla es exactamente el tipo de cosa que usted acepta que no debería usar var ... ¿Aclaración?
Telastyn
1
Creo que todos los usos de varaquí están bien. Posiblemente podría cambiar uno, pero incluso entonces creo que no es realmente necesario. ¿Por qué cambiarlos todos a tipo explícito?
Rowan Freeman
2
Tenga en cuenta que lo que es obvio para los humanos no siempre es obvio para el estudio visual.
candied_orange
¿Todos? Tiene un error en la captura de pantalla que está claramente relacionado con var.
Telastyn
Bueno, no es un error como tal, sino más bien una advertencia del tipo que esperarías que señalara un linter. Según la imagen, todos varshan sido marcados de la misma manera; con la misma cruz de advertencia junto a ellos y un subrayado rojo. Presumiblemente, Visual Studio quiere corregirlos a todos de la misma manera. A menos que me equivoque.
Rowan Freeman

Respuestas:

26

TL; DR: no, Microsoft no desalienta el uso de 'var' en C #. La imagen simplemente carece de contexto para explicar por qué se queja.

Si instala VS2017 RC y abrir el panel de opciones e ir a Text Editor -> C#, verá una nueva sección: Code Style. Esto es similar a lo que ReSharper ha ofrecido durante un tiempo: un conjunto de reglas configurables para codificar estilos.

Incluye tres opciones sobre el uso de var: para los tipos incorporados, cuando el tipo de variable es aparente y "En otro lugar". En cada caso, puede especificar "preferir tipo explícito" o "preferir var" y establecer el nivel de notificación en "ninguno", "sugerencia", "advertencia" o "error":

ingrese la descripción de la imagen aquí

David Arno
fuente
3
¿Cuál es el valor predeterminado? Si la "configuración de fábrica" ​​es "Prefiero el tipo explícito", entonces se podría argumentar que MS está desalentando el uso de var.
JacquesB
@JacquesB, los valores predeterminados son los que se muestran en la captura de pantalla. Como todos están configurados en "Ninguno", es difícil saber si "Preferir tipo explícito" se configura activamente como la forma preferida de MS, o si ese es solo el "valor cero". En lo que a mí respecta, los mejores desarrolladores están a favor var, por lo que no me importa mucho lo que opina MS sobre este asunto.
David Arno
6

Creo que estás leyendo demasiado sobre eso. Por lo tanto, hay una característica que le permite reemplazar los usos del tipeo implícito con anotaciones de tipo explícito, y a partir de eso, concluye que se desaconseja el tipeo implícito. También hay una función para compilar C♯ a CIL bytecode, ¿podría concluir que C♯ no se recomienda y que todos deberíamos escribir CIL bytecode? Probablemente no.

Microsoft simplemente está mostrando la profunda comprensión que el IDE tiene de su código. Incluso puede escribir sus tipos para usted sin que tenga que deletrearlos. Eso es.

Este es simplemente un buen ejemplo de mostrar las capacidades de comprensión de código del IDE. Es pequeño y autónomo (a diferencia de mostrar una refactorización más grande), está disponible en todas las ediciones y aplicable a todos los desarrolladores (a diferencia de algunas de las características de visualización arquitectónica realmente impresionantes que solo están disponibles en Ultimate y no son aplicables a una porción significativa de los usuarios potenciales de VS que nunca tendrán proyectos tan grandes), y aunque es muy simple (literalmente está haciendo exactamente lo mismo que csc.exeha estado haciendo desde entoncesvarse introdujo), ciertamente parece impresionante, especialmente para alguien que realmente no comprende el tipeo implícito y la inferencia de tipos (o que intenta buscar en Google "inferencia de tipos" y se abruma con términos como Hindley-Milner, unificación, retroceso, cuando de hecho La inferencia local de C♯ es extremadamente simple y directa).

En resumen: es una forma llamativa de mostrar una función IDE.

Jörg W Mittag
fuente