Лучшее слово для вывода переменных, отличных от var
Это может быть закрыто, но я все равно попробую.
На днях я показывал программисту VB6 часть своего кода на С#, и он заметил ключевое слово var и был как "О тип варианта, который не очень силен, когда вы это делаете". и мне пришлось пойти на типичную речь "var!= VARIANT", чтобы объяснить ему, что это не вариант, который он только вывел.
Я думал о других словах, которые они (команда С#) могли использовать, так что такого не произошло. Мне лично нравится делать вывод, что-то вроде:
infer person = new Person("Bob");
Я знаю, что это не так уж и важно, но просто любопытно посмотреть, что другие люди будут использовать для того, чтобы сделать то же самое.
Я сделал это сообщество wiki, потому что на самом деле у него нет ответа.
Ответы
Ответ 1
С++ 0x использует ключевое слово "auto" для вывода типа:
http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference
Это не плохой компромисс для тех парней, у которых "авто" было (AFAIK) уже ключевым словом. Я могу представить это в С#:
auto i = 3;
Мне действительно нравится "infer" (но тогда у меня тоже нет проблем с "var" ).
Ответ 2
thisappearsweaklytypedbutisactuallystronglytyped i = 3;
Это единственный способ избежать путаницы! Не волнуйтесь, автозаполнение означает, что на самом деле это не займет много времени...
Ответ 3
Как насчет возрождения старого BASIC
ключевого слова LET
?
let answer = 42;
Ответ 4
Но " infer" - это еще 2 символа, чем " var"... Может быть, "var" было не лучшим, чтобы поставить перед программистом VB6 сначала...
Ответ 5
Я думаю, что это отличная идея. Я сам должен время от времени объяснять ключевое слово var и как он на самом деле является просто заполнителем для типа и что он по-прежнему страдает сильной типизацией.
infer работает для меня!:)
Ответ 6
Как насчет foo?
Ответ 7
С другой стороны, программисты Pascal/Delphi и ActionScript сразу понимают истинный смысл var
. Итак, зачем выделять VB6? К сожалению, в нем было Variant
, поэтому ребята из VB6 быстро заменили var
на это, но независимо от того, куда бы вы ни пошли, кто-то где-то будет запутан.
Учитывая, что VB6 уже давно является наследием, что var
совершенно ясно для кого-то без бремена прошлого опыта (я имею в виду, сколько людей, новых для программирования, думало бы о var
, означая что-то отличное от "переменная"?) и что var
специально используется для обозначения "переменной" несколькими другими популярными языками, это не похоже на плохой выбор.
Очевидная проблема, которую я вижу с ключевым словом infer
, как указано, заключается в том, что она не очевидна, что она указывает тип переменной. Просто взглянув на него, он может также вывести свою ценность или что-то в этом роде (особенно если RHS не является new
-стоянием).
Ответ 8
Мне нравится var
, и думаю, что смысл в контексте строго типизированного языка ясен. dynamic
, с другой стороны, является "странным" в коде С#, поэтому более длинное семантическое именование подходит.
Ответ 9
С# предполагается, что все символы, как С++, не все ключевое слово, как VB. Как насчет "?"
? X = 5;
? Y = X.ToString();
? Z = Y + Y;
Какой тип Z? Кто знает?
Ответ 10
Я думаю, что С# будет лучше без ключевого слова "статический тип вывода". Поэтому он будет работать следующим образом:
myDict = new Dictionary<string, MyClass>();
Мне было интересно, почему дизайнеры С# почувствовали, что ключевое слово типа "var" необходимо для вывода статического типа. Нужно ли соблюдать основные правила грамматики С#? Это потому, что они уже думали о "динамике" и хотели сделать различие более понятным между выводами статического и динамического типов?
В любом случае, после некоторого длительного воздействия Python, "var" (или любое альтернативное ключевое слово или квалификатор) чувствует себя совершенно излишним. Возьмите следующий код:
foreach ( item in myList ) {
// Do stuff
}
Какая дополнительная информация добавит "var" перед "item" для читателя?
Ответ 11
Если ключевое слово было названо variable
вместо var
, мы можем не видеть такого рода путаницу. Возможно, это было намерением, но кто-то явно считал, что набрав variable
было слишком многословным, что привело к двусмысленности, которую мы имеем сегодня.
Ответ 12
Не совсем по теме, но VB.NET делает это почти слишком чисто. Я уверен, что он еще более запутан для пользователей VB6.
Dim p = New Person()
Это использование позднего связывания или вывода типа? Лучше проверьте свойства проекта.