2009-08-11 5 views
10

Esto podría cerrarse, pero lo intentaré de todos modos.Mejor palabra para inferir variables distintas de var

Estaba mostrando un programador de VB6 parte de mi código C# el otro día y notó la palabra clave var y dijo "Oh, un tipo de variante, eso no es muy fuerte cuando haces eso". y tuve que seguir el típico discurso "var! = VARIANT" para explicarle que no es una variante que solo el compilador infiera.

Estaba pensando en otras palabras que podrían haber usado (el equipo de C#), así que este tipo de cosas no sucedieron. Personalmente, me gusta inferir, algo así como:

infer person = new Person("Bob"); 

Sé que esto no es realmente tan grande de acuerdo, pero sólo curiosidad por ver lo que otras personas usarían para hacer lo mismo.

He hecho esto una wiki de la comunidad porque realmente no tiene una respuesta.

+0

Gracias por eso Ben. –

+0

Ningún problema en absoluto. –

+1

inferir un níquel, inferir un centavo. –

Respuesta

7

C++ 0x utiliza la palabra clave "auto" para la inferencia de tipos:

http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference

eso no es una mala compensación para los chicos, ya que "auto" era (que yo sepa) ya una palabra clave. Me puedo imaginar que en C#:

auto i = 3; 

me gusta "inferir" aunque (pero luego no tienen ningún problema con "var" tampoco).

+4

'auto' era de hecho una palabra clave, por lo que era un candidato principal para la reutilización, pero también suena bien.También fue recogido por el lenguaje D en el mismo contexto, por lo que está creciendo. –

+0

Particularmente porque era una palabra clave completamente inútil. –

+0

Palabra clave terrible. También podría tener otro llamado "matic". Entonces tendrías un par coincidente como foo y bar. –

1

Creo que esta es una gran idea. Yo mismo he tenido que explicar la palabra clave var de vez en cuando y cómo es realmente solo un marcador de posición para un tipo y que aún asegura una mecanografía fuerte.

infer funciona para mí! :)

0

Si la palabra clave se llamó variable en lugar de var, entonces es posible que no veamos este tipo de confusión. Esta pudo haber sido la intención, pero alguien claramente pensó que escribir variable era demasiado detallado, lo que generó la ambigüedad que tenemos hoy.

2

Pero "inferir" es 2 más caracteres de los que "var" ... Tal vez "var" no era el mejor que se puede poner delante de un programador de VB6 en un principio ...

+0

Estaba tratando de pensar en algo mejor que "inferir", pero "inf" no se sentía bien y estaba cerca de int, y "fer" ... sencillamente equivocado. –

+0

Jaja solo debería ser "v": v perro = nuevo Perro(); sería mucho mejor! –

1

¿Qué tal foo?

+0

sí, mucho mejor que var;) –

+0

Creo que también necesitamos una palabra clave "bar". Tal vez para arrojar excepciones puede tener "foobar NotImplementedException()" –

1

Por otro lado, los programadores Pascal/Delphi y ActionScript captan de inmediato el verdadero significado de var. Entonces, ¿por qué elegir VB6? Es desafortunado que haya tenido Variant, por lo que los chicos de VB6 sustituyen rápidamente a var por eso, pero no importa en qué camino vayas, alguien en algún lugar estará confundido.

Dado que VB6 es heredado desde hace bastante tiempo, var es perfectamente claro para alguien sin la carga de la experiencia pasada (es decir, cuántas personas nuevas en la programación pensarían en var significando algo diferente de "variable" ?), y que var ha sido utilizado específicamente para significar "variable" por varios otros idiomas populares, no parece una mala elección.

El problema obvio que veo con la palabra clave infer es que no es obvio que infiere el tipo de variable. Solo mirándolo, bien podría ser inferir su valor o algo así (especialmente si RHS no es una new-declaración).

3

¿Qué tal revivir la antigua palabra clave BASICLET?

let answer = 42; 
+0

Los chicos de VB6 todavía se confundirán; la palabra clave Let (en una propiedad) se usa solo para tipos de datos simples, mientras que Set se usa solo para objetos. – Gavin

1

me gusta var, y piensan que el significado en el contexto de un lenguaje fuertemente tipado está claro. dynamic, por otro lado, es el "bicho raro" en el código C# por lo que el nombramiento semántico más largo es apropiado.

4
thisappearsweaklytypedbutisactuallystronglytyped i = 3; 

¡Es la única manera de evitar confusiones! No se preocupe, autocompletar significa que realmente no tardará mucho más en escribir ...

1

Se supone que C# es todo de forma simbólica, como C++, no todas las palabras clave, como VB. ¿Qué tal "?"

? X = 5; 
? Y = X.ToString(); 
? Z = Y + Y; 

¿Qué tipo es Z? ¿Quién sabe?

+0

¿Una cadena? De todas formas, '?' se toma para el operador condicional. – Blorgbeard

+0

Me encanta esa sensación "C++" de C++ cada vez que escribo 'reinterpret_cast' o' static_assert' ... –

+0

esto podría confundirse con un tipo de nullable a veces (no puedo pensar en nada), pero me gusta en general. – RCIX

1

Creo que C# sería mejor sin la palabra clave "inferencia de tipo estático" en absoluto. Por lo tanto, sería el siguiente:

myDict = new Dictionary<string, MyClass>(); 

Me preguntaba por qué C# diseñadores sintieron una palabra clave como "var" que se necesitaba para la inferencia de tipo estático. ¿Era necesario cumplir con las reglas gramaticales fundamentales de C#? ¿Fue porque ya habían pensado en "dinámica" y querían hacer la distinción más clara entre la inferencia de tipo estática y dinámica?

En cualquier caso, después de una exposición prolongada a Python, "var" (o cualquier palabra clave alternativa o calificador) se siente completamente superfluo. Tome el siguiente código:

foreach (item in myList) { 
    // Do stuff 
} 

¿Qué información adicional le daría al lector agregar "var" delante del "elemento"?

+0

"var" le dice al lector que el programador no cometió un error tonto y dejó el tipo. Apuesto a que es mucho más fácil para el analizador sintáctico también. Solo una suposición, pero apuesto a que comenzar con una palabra clave ayuda al analizador a obtener su orientación. –

+0

@ John Saunders: O cometer un error aún más tonto y escribir mal la variable. – supercat

+0

No sé a qué te refieres. No te permite escribir mal la variable. Si lo escribe mal en la declaración, tendrá que continuar deletreando mal cada vez que lo use. –

0

No completamente en el tema, pero VB.NET hace esto casi demasiado limpio. Apuesto a que es aún más confuso para los ex usuarios de VB6.

Dim p = New Person() 

¿Eso es utilizar enlace tardío o inferencia tipo? Mejor revise las propiedades de su proyecto.

+0

Me refiero a "Dim P = New Person()" para el caso en que el valor inicial es una expresión de constructor. – supercat

Cuestiones relacionadas