![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
взволновала
![]() http://habrahabr.ru/blogs/net/39231/ Интересно что у нас по этому поводу скажут ![]() ЗЫ Там мне сказать не дают :'( ибо рег закрыт -------------------- Жизнь - печальная штука. |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Интересная вещь, мне кажется, хотя, по моему мнению, снижает читабельность кода.
|
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
это мягко сказано. Как по мне, аргументация автора статьи недостаточно убедительна. Кроме спорного пункта "использование var приводит к уменьшению «шума» в коде", все остальное - слишком субъективно. А решарпером я не пользуюсь =) -------------------- I don't need a reason being who I am... |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Вобщем пока что я очень рад , что я не один думаю так как думаю
![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
IMHO, var можно применять только тогда, когда тип переменной явно упоминается в той же строчке. В остальных случаях получится happy debugging для человека, который будет поддерживать код.
|
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Помимо читабельности, это вызовет массу ошибок, если ты первый раз после объявления присвоил переменной значение int, а потом значение string, то компилятор ругаться матом будет. Если уж на то пошло, давайте везде object использовать... ыыы))
![]() -------------------- ![]() |
|||
|
||||
HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
var можно использовать только явно определяя тип (либо с анонимными типами, но это отдельная песня). Так что не волнуйся по другому просто не получится сделать. |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
интересно такой код скомпилится:
скорее всего нет... -------------------- ![]() |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
-------------------- I don't need a reason being who I am... |
|||
|
||||
PashaPash |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Почувствуй разницу между "упомянуть" и "определить". Явно определить тип так, чтобы его видел компилятор, и явно упомянуть тип для человека на саппорте - разные вещи. Вот скажи, вот в этих строчках явно виден тип переменной? А ведь он там определен.
Кроме того, никто не застрахован от изменения стороннего API, и написание кода без явного упоминания типа переменной - самоубийство. Изменение double на int компилятор проглотит, но потом вылезут ошибки округления, при делении например. Вот хотя бы:
Понять всю опасность var просто - возьмите запущенный кусок кода из своего проекта, с 5-6 локальными переменными. поменяйте явное упоминание типов на var. Через две недели взгляните на него - если не возникнет сомнений относительно типов - то вы компилятор. Это сообщение отредактировал(а) PashaPash - 12.9.2008, 11:47 |
||||||
|
|||||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
имхо автоматический вывод рулил, рулит и будет рулить. Не понимаю паники выше отписавшихся. Наверное ocaml и python уже съели мой моск.
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
nikitao |
|
||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Mayk, видимо )))) меня к примеру от слова var трясет )))))
Но вообще господа речь идет несколько о другом как я понял речь идет не о повсеместном использовании var , а об желательном использовании. Ну т е если это ведет к неопределенности как с int и double то ясно что не надо юзать , а вопрос надо ли использовать в в таких случаях
или
лично я резко против ))) -------------------- Жизнь - печальная штука. |
||||
|
|||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
+много, сделали бы его в C# ещё помощнее, по аналогии с функциональными языками, а то с var в текущем варианте далеко не уедешь. Хотя, как средство для улучшения читабельности, безусловно стоит применять.
Всем, кому мерещится, что var снижает читабельность и усложняет отладку, рекомендую обратиться к венгерской нотации, уверен, что она вам понравится... ![]() -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Напишите хоть одну задачу где без ключевого слова var, не обойтись? Хочется узнать.
![]() -------------------- ![]() |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
MasterOfCode, ты о чём? В CLR нет никаких изменений со времен .NET 2.0, все возможности C# 3.5 - это синтаксический сахар, поэтому твой вопрос лишён смысла. Рекомендую тебе почитать статью - http://rsdn.ru/article/philosophy/SyntacticSugar.xml Более того, открою тебе страшную тайну, нет ни одной задачи, которую бы нельзя было решить на ассемблере, но можно на C#, тут вопрос времени и удобства, а не теоретической возможности. Добавлено через 3 минуты и 13 секунд Плюс ко всему, редко имеет смысл тип объекта сам по себе, гораздо важнее его интерфейс, т.е. набор методов, которые он имеет. Впрочем, это сложно объяснить тем, кто никогда не сталкивался с функциональным программированием... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Спасибо за рекомендации, осталось переслать их ребятам из MS - а то они сомневаются, MSDN предупреждения вписывают во всех статьях про var. Венгерская нотация вообще противопоказана в .net, это явно указано в .NET Framework Developer's Guide/General Naming Conventions. Рекомендую посидеть год-два на саппорте проекта средних размеров. Или порулить таким проектом хотя бы месяц, и послушать как разработчики отзываются о коде соседа. Твои требования к читабельности кода сразу повысятся на порядок. Добавлено @ 14:00 Имя переменной не должно включать в себя упоминание о типе. Поэтому var overuse приводит к незнанию разработчика и о типе и об интерфейсе до момента компиляции. В сказочном мире, где крупные проекты пишутся с использованием ФП одним человеком на коленке это еще приемлимо. В реальном, где всегда есть куча чужого кода, и 40-50% времени уходит на его отладку - нет. Это сообщение отредактировал(а) PashaPash - 12.9.2008, 14:01 |
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Безусловно, var - это не панацея, и ничего революционного в нём нет, но штука удобная и для читаемости и для отладки, если использовать его с умом, как и любую абстракцию.
Это сообщение отредактировал(а) source777 - 12.9.2008, 15:26 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
PashaPash |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Код в основном не пишут. Его читают. var повышает удобство написания кода, но кроме пары ситуаций понижает его читабельность. Не читабельность автором через 5 минут в студии. А читабельность тем, кто будет отлаживать крэш в нем через пару месяцев. Visual Studio и IntelliSense - это круто...во время написания кода. А во время отладки - будешь водить мышой над 5-6 чужими локальными переменными и смотреть на их тип? Качать фотографическую память? Или записывать типы на бумажку? Если для прочтения кода надо водить мышкой над каждой переменной - то код нечитабельный. Если ты без IntelliSense не можешь сказать что происходит в функции - то код нечитабельный. Судя по тому, что ты этого не понимаешь, ты никогда ничего серьезного писал.
Саппорт - это не только люди, которые отвечают на звонки. Это еще и разработчики, которые сидят и копают чужой код, написанный такими как ты. И руководители проектов, которые вынуждены думать о будущем багфиксе. Да, вас - студентов/джуниоров - садят сразу на новые проекты, которые отправляются на свалку сразу после релиза, и которые не надо поддерживать. В сказочном мире. В реальном студенты обычно попадают на готовый проект, и начинают отжигать в коде. А я, как лид, вынужден бить по рукам вот таких как ты. И копаться в чужом спагетти. Может быть ты мегазвезда программирования, и твой код безупречен? Никогда не открывал свои проекты после даты релиза? А может все-таки кодер, за которым проще переписать заново, чем исправить? |
||||
|
|||||
nikitao |
|
||||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Так. Стоп хардкор. Устаканились
![]() ![]() ![]() Теперь по сабжу.
Повторю за PashaPash. Венгерка противопоказана в .NET. Вот статья все с того же хабра о хорошем стиле http://habrahabr.ru/blogs/net/26077/
Вот я тупой наверно. Я НЕ понимаю как это улучшает читабельность. Ну не понимаю я. обьясните.
ну анонимные типы к примеру. ЗЫ Кстати аргументы про IntelliSense вообще не принимаются. Речь идет не о IDE , доп инструментах или еще чему то. Речь идет о языке. Так можно далеко зайти. ЗЫЫ Кстати я тут студентом на днях стал ![]() Это сообщение отредактировал(а) nikitao - 13.9.2008, 00:47 -------------------- Жизнь - печальная штука. |
||||||
|
|||||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Сравни 2 строчки кода(название типа сперто с хабра)
во второй - ненужное дублирование типа. Который к тому же занимает много букв на экране. Много ненужных букв на экране = плохая читабельность. Это сообщение отредактировал(а) Mayk - 13.9.2008, 06:32 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
ну....... ведь мы же комментарии в коде пишем. Они тож много букв занимают и в каком то смысле шумы создают.
Ну и насколько сильно без var шумы? Если код с тоступами , пропусками строк оформить , то помоему все читабельно и остается. -------------------- Жизнь - печальная штука. |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
ну так никто не заставляет писать "шумные" комментарии в стиле
но var'то тут причем? var убирает излишки по типу в примере выше. Зачем писать тип дважды? Что это даёт? ![]() Это сообщение отредактировал(а) Mayk - 13.9.2008, 10:16 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Никто не предлагает писать тип дважды - в случаях с new, кастом и выражениями linq var явно повышает читаемость. Просто новый решарпер настойчиво предлагает не писать тип вообще во всех случаях, когда его можно вывести. А так как решарпер очень популярен (имхо незаслуженно, но это оффтоп), то через некоторое время можно ожидать кучу кода в котором вообще типы переменных не упоминаются. |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Я то это знаю, но вам двоим она "упростит" отладку(вы наконец сможете вместо семантически ясных идентификаторов, писать iMyVar и радоваться, что не надо пользоваться IntelliSense), так что смело юзайте... ![]() ты и nikitao предлагаете, вы ведь против этого ключевого слова, значит вам придётся писать тип дважды и не использовать Linq и анонимные классы. Но как я уже говорил такой бездумный пуризм сродни использованию венгерской нотации... Вместо этого я считаю, куда более разумным использовать вывод типов, естественно с умом, как и любое средство повышения уровня абстракции. А причём тут я? ты копаешься и копайся, надо было компанию лучше выбирать... Это сообщение отредактировал(а) source777 - 13.9.2008, 17:47 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Ну просвети меня, вдруг я что-то упустил. Ты можешь понять что делает чужой код, без знания о типах и интерфейсах переменных? Или ты даже свой код без IntelliSense прочесть не можешь? Ты ж считаешь что StreamWriter - это "неуправляемый тип", а финализатор - это блок finally. Уверен что сможешь научить меня отладке .net приложений? Ты что, принципиально не читаешь моих сообщений до конца? Не перевирай смысл, и не вырывай фразы из контекста. Я не предлагаю не использовать вар вообще, я предлагаю его использовать только в случаях, когда без него тип явно упоминается дважды или с LINQ. Это бездумный пуризм? Это как раз использование с умом, с заботой о том, кто будет код читать. И с четким критериями. А вот ты предлагаешь использовать его вообще везде где только можно, оговорка "с умом" вообще появилась только в последней мессаге. Да еще и считаешь что венгерка может упростить отладку. Семантически ясные идентификаторы не должны включать в себя имя типа, они должны говорить о назначении переменных. Если ты действительно считаешь что знать о типе переменной разработчику не нужно - то тебя ждут больше проблемы при работе в команде. Переходи на VB, там давно есть late bound. Это сообщение отредактировал(а) PashaPash - 13.9.2008, 18:23 |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
где я писал , что в Linq и анонимных нельзя использовать...вот ума не приложу ![]() Согласен, что ничего не дает. Просто мне то кажется , что не особо и мешает , если код - не помойка ( ну а если помойка , то тут ничо не поможет). Просто если типы простые типа string DateTime или int помоему разницы вообще нету. Ну а если там такие плохочитаемые как List<IMySuperPuperInterface> , так их обычно не так и много на "анализируемом" куске кода, так что тоже получается не мешает. Это сообщение отредактировал(а) nikitao - 14.9.2008, 00:39 -------------------- Жизнь - печальная штука. |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Они увеличивают длину строки, тем самым повышая шанс того что часть аргументов, передаваемых конструктору будет скрыта за экраном и придется скроллить текст во время чтения исходника или возиться с переносами аргументов на новые строки во время написания кода Перенос части аргументов,кстати, на новые строки в свою очередь уменьшает кол-во ....хммм... statement'ов, которые видятся за раз, что отвратительно сказывается на читабельности. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Переменную ты объявляешь только один раз, а потом ее используешь энное кол-во раз. И тогда
-------------------- ![]() |
|||
|
||||
Veitmen |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 3 Всего: 4 |
Ну про венгерку PashaPash, сказал верно все.
Что касается var то порой использовать это удобно. Но только в том случае, когда явно видно какой тип все таки она будет принимать. В выше риведенном примере это явно демонстрируется. Но если что нибудь типа:
то никаких выгод я не вижу. Да, надо правильно называть методы. Это бесспорно. Но если я использую чужой код? Да и в конце концов, даже если я узаю свой код, человек который будет читать мой код может не сразу понять что это за тип, даже если я правильно назову свой метод. В конце концов, явное указание типа позволяет делать имена функций короче. Потому что явно видно что это за лист будет. Да, вы конечно можете сказать что можно сделать так:
Но это дополнительный код. Это минус. |
||||
|
|||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
И что? Что из этого следует? Объясни как из кол-ва объявлений следует что var плох. Какое неудобство? Кто-то не может прочитать тип если он написан целый один раз а не всего лишь два? Предлагаю не останавливаться. И писать еще более удобный для отладки код:
And ze drims fainali keim tru! -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Я вроде даже смайлик поставил, чтобы ты понял, что это издёвка над твоим пуризмом...
тут не более, чем разногласия в терминологии, можно говорить, что FileStream(про него речь шла) - "управляемая обёртка для неуправляемого ресурса", а можно и сократить... всё равно понятно, что имеется в виду. Где это я такое говорил?
Возьмём простой пример:
Я утверждаю, что данный код вполне ясен и без явного объявления типов, в данном случае нам достаточно знать, что GetOrders возвращает что-то IEnumerable<Order>, что и следует из его названия. Чтобы указать тип явно, у нас три пути: 1) держать весь API в памяти 2) воспользоваться столь не любимым (судя по всему даже презираемым) вами IntelliSense 3) найти декларацию метода(средствами VS, ну или если хочешь вручную) Однако никакой выгоды от явного указания типа мы в данном случае всё равно не получим! Эта оговорка появилась лишь в последнем сообщении, до этого было "можно, если ..., но всё равно не нужно" ![]() Это сообщение отредактировал(а) source777 - 15.9.2008, 11:20 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
PashaPash |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
![]()
Фишка примера в том, что переменная orders тебе тут не нужна. Вставь вызов GetOrders прямо в foreach - и одной переменной станет меньше. И про тип гадать не придется. А для sum ты тип почему-то указал явно, хотя он тоже выводится. Посмотри в комментах на хабре, там кто-то уже сделал баг - var sum=0; Хотя sum обладает вполне достаточной семантической ясностью - это ж сумма, что тут непонятного.
Когда это я писал "все равно не нужно"? Нужно, но только в паре вполне определенных случаев. |
||||||
|
|||||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |