Cela pourrait être fermé, mais je vais essayer de toute façon.
Je montrais un programmeur VB6 une partie de mon code C # l'autre jour et il a remarqué le mot-clé Var et était comme "Oh un type de variante, ce n'est pas vraiment de frappe fort quand vous faites cela. " Et je devais aller sur le discours typique "var! = variante" pour lui expliquer que ce n'est pas une variante que le compilateur a inféré. P>
Je pensais à d'autres mots qu'ils (C # équipe) auraient pu utiliser pour ce genre de chose ne se produisait pas. Personnellement, j'aime infère em>, quelque chose comme: p> Je sais que ce n'est pas vraiment si grand d'affaire, mais juste curieux de voir ce que d'autres personnes Utilisez-vous pour faire la même chose. P> J'ai fait cela un wiki communautaire parce qu'il n'a pas vraiment de réponse. p> p>
12 Réponses :
Je pense que c'est une bonne idée. J'ai moi-même avoir dû expliquer le mot-clé Var de temps en temps et comment il s'agit vraiment d'un espace réservé pour un type et qu'il assure toujours une clé forte. p>
infère em> strong> fonctionne pour moi! :) p>
Si le mot clé a été nommé variable code> au lieu de
var code>, nous ne voyons peut-être pas ce genre de confusion. Cela a peut-être été l'intention, mais une personne a clairement pensé que la typing
variable code> était trop verbeuse, conduisant à l'ambiguïté que nous avons aujourd'hui. P>
mais " infère em> strong>" est de 2 autres caractères que " var em> strong>" ... peut-être "var" N'était-ce pas la meilleure chose à faire face à un programmeur VB6 au début ... P>
J'essayais de penser à quelque chose de mieux que "déduire" mais "infrète" ne se sentait pas bien et que c'était de près de l'int, et "fer" ... tout simplement faux.
Haha Ça devrait juste être "V": V chien = nouveau chien (); serait beaucoup mieux!
Que diriez-vous de
Ouais, tellement mieux que var;)
Je pense que nous avons également besoin d'un mot-clé "bar". Peut-être pour jeter des exceptions que vous pouvez avoir "Foobar NotimeplementedException ()"
c ++ 0x utilise le mot-clé "Auto" pour l'inférence de type:
http://fr.wikipedia.org/wiki/c%2b%2b0x#type_inference p>
Ce n'est pas un mauvais compromis pour ces gars depuis" Auto "(AFaik) déjà un mot-clé. Je peux l'imaginer en C #: p> je fais comme "infère" (mais je n'ai pas de problème avec "var" non plus). P> p>
auto code> était en effet un mot clé, il s'agissait donc d'un candidat principal pour la réutilisation, mais cela semble également correct. Il a également été ramassé par la langue D dans le même contexte, c'est donc un peu grandement en croissance.
En particulier puisque c'était un mot clé totalement inutile.
Terrible mot-clé. Vous pourriez aussi bien en avoir un autre appelé "Matic". Ensuite, vous auriez une paire correspondante comme FOO et BAR.
Je préfère Auto, puis s'ils décident de déduire partiellement un type, il sonnera mieux que Var: Expression
D'autre part, les programmeurs Pascal / Delphi et ActionScript saisissent immédiatement le vrai sens de Étant donné que VB6 est un héritage pendant un certain temps maintenant, que Le problème évident que je vois avec var code>. Alors pourquoi single out vb6? Il est regrettable que cela ait eu
variante code>, et donc les gars VB6 remplacent rapidement
var code> pour cela, mais quelle que soit la direction que vous allez, une personne quelque part sera confuse. p>
var code> est parfaitement clair à une personne sans le fardeau de l'expérience passée (je veux dire, combien de personnes nouvelles pour la programmation penseraient au
var code> signifiant quelque chose de différent de "variable"?), et que
var code> a été spécifiquement utilisé pour signifier "variable" par plusieurs autres langues populaires, cela ne semble pas être un mauvais choix . p>
infère code> est indiqué que cela n'est pas évident qu'il prédit le type de variable. Juste la regarder, il pourrait aussi bien concerner sa valeur ou quelque chose (surtout si RHS n'est pas un
nouveau code> -Statement). P>
Que diriez-vous de revivre Ye Olde BASIC code> mot-clé
laisse code>?
Les gars VB6 seront toujours confus alors; Le mot clé USE (sur une propriété) est utilisé uniquement pour des tyranes de données simples, tandis que le jeu est utilisé uniquement pour les objets.
J'aime var code> et pense que la signification dans le contexte d'une langue fortement saisie est claire.
dynamique code>, d'autre part, est le "Oddball" dans le code C # afin que le nommage sémantique plus long est approprié. p>
thisappearsweaklytypedbutisactuallystronglytyped i = 3; It's the only way to avoid confusion! Don't worry, autocomplete means it won't really take that much longer to type...
C # est censé être tous symboliquement, comme C ++, pas toutes les mots clés, comme vb. Que diriez-vous de " Quel type est z? Qui sait? P> p>
Un string? De toute façon, '?' est pris pour l'opérateur conditionnel.
J'adore que "symboliquement" C ++ ressent chaque fois que je tape reterpret_cast code> ou
static_assert code> ...
Cela pourrait éventuellement être confondu avec un type nullable à des moments (je ne peux pas penser à des points mortels), mais je l'aime dans l'ensemble.
@Blorgbeard, un symbole peut être utilisé plus d'une fois. Quand cette réutilisation entraînerait-elle une ambiguïté? Le côlon est utilisé à la fois pour l'opérateur d'héritage et l'opérateur conditionnel. @Pavel Minaev, je vois ce que tu veux dire. C ++ a des mots clés bienveillants et les traits de soulignement sont la cerise sur le gâteau.
Je pense que c # serait mieux sans "Inférence de type statique" du tout. Donc, cela fonctionnerait comme ceci: Je me demandais pourquoi C # Designers a ressenti un mot clé comme "var" était nécessaire pour une inférence de type statique. Était-il nécessaire de respecter les règles de grammaire fondamentales de C #? Était-ce parce qu'ils avaient déjà pensé à "dynamique" et voulaient rendre la distinction plus claire entre une inférence statique et dynamique de type? P> Dans tous les cas, après une exposition prolongée à Python, "Var" (ou tout Le mot clé alternatif ou qualificatif) se sent complètement superflu. Prenez le code suivant: p> quelles informations supplémentaires ajouteraient "var" devant "élément" donner au lecteur? P> p>
"Var" indique au lecteur que le programmeur n'a tout simplement pas fait une erreur muette et laisser le type. Je parie que c'est beaucoup plus facile pour l'analyseur. Seulement une supposition, mais je parie en commençant par un mot clé, aide l'analyseur à obtenir ses roulements.
@John Saunders: ou faire une erreur de dumber encore plus grande et orthographique la variable.
Je ne sais pas ce que tu veux dire. Cela ne vous permet pas de manquer la variable. Si vous omettez-le à la Déclaration, vous devrez continuer à le manquer lorsque vous l'utilisez.
@Johnsaunders: Si l'on avait une variable appelée mydict code> et que l'énoncé ci-dessus était un moyen légal de déclarer
mydict code>, puis essayant de dire
mydic = nouveau dictionnaire
MyDICT code> entraînerait la création du compilateur une nouvelle variable tout en laissant
mydict code> inchangé.
Pas complètement sur la succursale, mais vb.net le fait presque trop proprement. Je parie qu'il est encore plus confus pour les utilisateurs ex vb6.
Dim p = New Person()
Je me réfère "Dim P = nouvelle personne ()" pour le cas où la valeur initiale est une expression de constructeur.
déduire un nickel, infère un centime.
YoufigureIt Personne = Nouvelle personne ("Bob");
Il y a quelque chose à propos de Var qui frappe une bonne corde avec moi.
Inférer est excellent. Dit exactement ce que ça fait.