Подтвердить что ты не робот

Лучшее слово для вывода переменных, отличных от var

Это может быть закрыто, но я все равно попробую.

На днях я показывал программисту VB6 часть своего кода на С#, и он заметил ключевое слово var и был как "О тип варианта, который не очень силен, когда вы это делаете". и мне пришлось пойти на типичную речь "var!= VARIANT", чтобы объяснить ему, что это не вариант, который он только вывел.

Я думал о других словах, которые они (команда С#) могли использовать, так что такого не произошло. Мне лично нравится делать вывод, что-то вроде:

 infer person = new Person("Bob");

Я знаю, что это не так уж и важно, но просто любопытно посмотреть, что другие люди будут использовать для того, чтобы сделать то же самое.

Я сделал это сообщество wiki, потому что на самом деле у него нет ответа.

4b9b3361

Ответ 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()

Это использование позднего связывания или вывода типа? Лучше проверьте свойства проекта.