Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ключевое слово var 
:(
    Опции темы
PashaPash
Дата 12.9.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(source777 @  12.9.2008,  13:16 Найти цитируемый пост)
Всем, кому мерещится, что var снижает читабельность и усложняет отладку, рекомендую обратиться к венгерской нотации, уверен, что она вам понравится

Спасибо за рекомендации, осталось переслать их ребятам из MS - а то они сомневаются, MSDN предупреждения вписывают во всех статьях про var.
Венгерская нотация вообще противопоказана в .net, это явно указано в .NET Framework Developer's Guide/General Naming Conventions. Рекомендую посидеть год-два на саппорте проекта средних размеров. Или порулить таким проектом хотя бы месяц, и послушать как разработчики отзываются о коде соседа. Твои требования к читабельности кода сразу повысятся на порядок.

Добавлено @ 14:00
Цитата(source777 @  12.9.2008,  13:35 Найти цитируемый пост)
Плюс ко всему, редко имеет смысл тип объекта сам по себе, гораздо важнее его интерфейс, т.е. набор методов, которые он имеет. Впрочем, это сложно объяснить тем, кто никогда не сталкивался с функциональным программированием... 

Имя переменной не должно включать в себя упоминание о типе. Поэтому var overuse приводит к незнанию разработчика и о типе и об интерфейсе до момента компиляции. В сказочном мире, где крупные проекты пишутся с использованием ФП одним человеком на коленке это еще приемлимо. В реальном, где всегда есть куча чужого кода, и 40-50% времени уходит на его отладку - нет.

Это сообщение отредактировал(а) PashaPash - 12.9.2008, 14:01


--------------------
PM MAIL WWW   Вверх
source777
Дата 12.9.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(PashaPash @  12.9.2008,  13:55 Найти цитируемый пост)
Поэтому var overuse приводит к незнанию разработчика и о типе и об интерфейсе до момента компиляции.
Кто тебе эту чушь внушил? Запусти Visual Studio и попробуй IntelliSense, прежде чем говорить, или в твоём "реальном" мире, код в блокноте пишут???

Безусловно, var - это не панацея, и ничего революционного в нём нет, но штука удобная и для читаемости и для отладки, если использовать его с умом, как и любую абстракцию.

Цитата(PashaPash @  12.9.2008,  13:55 Найти цитируемый пост)
Рекомендую посидеть год-два на саппорте проекта средних размеров. 
твой путь, как видно приводит к неважному результату... Кстати как тебя из саппорта в программисты перевели? Дефицит кадров?


Это сообщение отредактировал(а) source777 - 12.9.2008, 15:26


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 12.9.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(source777 @  12.9.2008,  15:16 Найти цитируемый пост)
Кто тебе эту чушь внушил? Запусти Visual Studio и попробуй IntelliSense, прежде чем говорить, или в твоём "реальном" мире, код в блокноте пишут???

Код в основном не пишут. Его читают. var повышает удобство написания кода, но кроме пары ситуаций понижает его читабельность. Не читабельность автором через 5 минут в студии. А читабельность тем, кто будет отлаживать крэш в нем через пару месяцев. Visual Studio и IntelliSense - это круто...во время написания кода. А во время отладки - будешь водить мышой над 5-6 чужими локальными переменными и смотреть на их тип? Качать фотографическую память? Или записывать типы на бумажку? Если для прочтения кода надо водить мышкой над каждой переменной - то код нечитабельный. Если ты без IntelliSense не можешь сказать что происходит в функции - то код нечитабельный. Судя по тому, что ты этого не понимаешь, ты никогда ничего серьезного писал.

Цитата(source777 @  12.9.2008,  15:16 Найти цитируемый пост)
твой путь, как видно приводит к неважному результату... Кстати как тебя из саппорта в программисты перевели? Дефицит кадров?

Саппорт - это не только люди, которые отвечают на звонки. Это еще и разработчики, которые сидят и копают чужой код, написанный такими как ты. И руководители проектов, которые вынуждены думать о будущем багфиксе.
Да, вас - студентов/джуниоров - садят сразу на новые проекты, которые отправляются на свалку сразу после релиза, и которые не надо поддерживать. В сказочном мире. В реальном студенты обычно попадают на готовый проект, и начинают отжигать в коде. А я, как лид, вынужден бить по рукам вот таких как ты. И копаться в чужом спагетти.

Может быть ты мегазвезда программирования, и твой код безупречен? Никогда не открывал свои проекты после даты релиза? А может все-таки кодер, за которым проще переписать заново, чем исправить?


--------------------
PM MAIL WWW   Вверх
nikitao
Дата 13.9.2008, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Так. Стоп хардкор. Устаканились smile  Скажем NET обидам и ссорам! smile     smile 

Теперь по сабжу.

Цитата(source777 @  12.9.2008,  14:16 Найти цитируемый пост)
Всем, кому мерещится, что var снижает читабельность и усложняет отладку, рекомендую обратиться к венгерской нотации, уверен, что она вам понравится...  smile  

Повторю за PashaPash. Венгерка противопоказана в .NET. Вот статья все с того же хабра о хорошем стиле 
http://habrahabr.ru/blogs/net/26077/


Цитата(source777 @  12.9.2008,  14:16 Найти цитируемый пост)
 Хотя, как средство для улучшения читабельности, безусловно стоит применять.

Вот я тупой наверно. Я НЕ понимаю как это улучшает читабельность. Ну не понимаю я. обьясните.


Цитата(MasterOfCode @  12.9.2008,  14:21 Найти цитируемый пост)
Напишите хоть одну задачу где без ключевого слова var, не обойтись? Хочется узнать. smile

ну анонимные типы к примеру. 

ЗЫ 
Кстати аргументы про IntelliSense вообще не принимаются. Речь идет не о IDE , доп инструментах или еще чему то. Речь идет о языке.  Так можно далеко зайти.

ЗЫЫ
Цитата(PashaPash @  12.9.2008,  17:31 Найти цитируемый пост)
В реальном студенты обычно попадают на готовый проект, и начинают отжигать в коде. А я, как лид, вынужден бить по рукам вот таких как ты. И копаться в чужом спагетти.

Кстати я тут студентом на днях стал smile  Ощущения жуткие , но это не тут обсуждать. Паразила позиция одного из одногруппников , что какой код не имеет значения. Он так и сказал : "Код откомпилировался , его не видно и не важно что в нем".  Меня всегда от этого трясло. 

Это сообщение отредактировал(а) nikitao - 13.9.2008, 00:47


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Mayk
Дата 13.9.2008, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(nikitao @  13.9.2008,  04:41 Найти цитируемый пост)

Вот я тупой наверно. Я НЕ понимаю как это улучшает читабельность. Ну не понимаю я. обьясните.

Сравни 2 строчки кода(название типа сперто с хабра)
Код

var list = new List<IMySuperPuperInterface>(); 
List<IMySuperPuperInterface> list = new List<IMySuperPuperInterface>(); 

во второй - ненужное дублирование типа.  Который к тому же занимает много букв на экране. 
Много ненужных букв на экране = плохая читабельность.


Это сообщение отредактировал(а) Mayk - 13.9.2008, 06:32


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
nikitao
Дата 13.9.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



ну....... ведь мы же комментарии в коде пишем. Они тож много букв занимают и в каком то смысле шумы создают.
Ну и насколько сильно без var шумы? Если код с тоступами , пропусками строк оформить , то помоему все читабельно и остается.


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Mayk
Дата 13.9.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(nikitao @  13.9.2008,  13:23 Найти цитируемый пост)
ну....... ведь мы же комментарии в коде пишем. Они тож много букв занимают и в каком то смысле шумы создают.

ну так никто не заставляет  писать "шумные" комментарии в стиле
Код

 // increase z by 6
z += 6; 
// ok, now z is increased.

но var'то тут причем? var убирает излишки по типу
Цитата(Mayk @  13.9.2008,  10:31 Найти цитируемый пост)
List<IMySuperPuperInterface>

в примере выше. Зачем писать тип дважды? Что это даёт?   smile 

Это сообщение отредактировал(а) Mayk - 13.9.2008, 10:16


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
PashaPash
Дата 13.9.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(Mayk @  13.9.2008,  10:15 Найти цитируемый пост)
Зачем писать тип дважды? Что это даёт? 

Никто не предлагает писать тип дважды - в случаях с new, кастом и выражениями linq var явно повышает читаемость. Просто новый решарпер настойчиво предлагает не писать тип вообще во всех случаях, когда его можно вывести. А так как решарпер очень популярен (имхо незаслуженно, но это оффтоп), то через некоторое время можно ожидать кучу кода в котором вообще типы переменных не упоминаются.


--------------------
PM MAIL WWW   Вверх
source777
Дата 13.9.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(PashaPash @  12.9.2008,  16:31 Найти цитируемый пост)
А во время отладки - будешь водить мышой над 5-6 чужими локальными переменными и смотреть на их тип?
У тебя странные способы отладки... 

Цитата(nikitao @  13.9.2008,  00:41 Найти цитируемый пост)
Повторю за PashaPash. Венгерка противопоказана в .NET. 
Я то это знаю, но вам двоим она "упростит" отладку(вы наконец сможете вместо семантически ясных идентификаторов, писать iMyVar и радоваться, что не надо пользоваться IntelliSense), так что смело юзайте... smile 

Цитата(PashaPash @  13.9.2008,  12:50 Найти цитируемый пост)
Никто не предлагает писать тип дважды
ты и nikitao предлагаете, вы ведь против этого ключевого слова, значит вам придётся писать тип дважды и не использовать Linq и анонимные классы. Но как я уже говорил такой бездумный пуризм сродни использованию венгерской нотации... Вместо этого я считаю, куда более разумным использовать вывод типов, естественно с умом, как и любое средство повышения уровня абстракции.

Цитата(PashaPash @  12.9.2008,  16:31 Найти цитируемый пост)
В реальном студенты обычно попадают на готовый проект, и начинают отжигать в коде. А я, как лид, вынужден бить по рукам вот таких как ты. И копаться в чужом спагетти.

А причём тут я? ты копаешься и копайся, надо было компанию лучше выбирать...

Это сообщение отредактировал(а) source777 - 13.9.2008, 17:47


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PashaPash
Дата 13.9.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(source777 @  13.9.2008,  17:41 Найти цитируемый пост)
У тебя странные способы отладки... 

Ну просвети меня, вдруг я что-то упустил. Ты можешь понять что делает чужой код, без знания о типах и интерфейсах переменных? Или ты даже свой код без IntelliSense прочесть не можешь?
Ты ж считаешь что StreamWriter - это "неуправляемый тип", а финализатор - это блок finally. Уверен что сможешь научить меня отладке .net приложений?
Цитата(source777 @  13.9.2008,  17:41 Найти цитируемый пост)
ты и nikitao предлагаете, вы ведь против этого ключевого слова, значит вам придётся писать тип дважды и не использовать Linq и анонимные классы. Но как я уже говорил такой бездумный пуризм сродни использованию венгерской нотации... Вместо этого я считаю, куда более разумным использовать вывод типов, естественно с умом, как и любое средство повышения уровня абстракции.

Ты что, принципиально не читаешь моих сообщений до конца? Не перевирай смысл, и не вырывай фразы из контекста. Я не предлагаю не использовать вар вообще, я предлагаю его использовать только в случаях, когда без него тип явно упоминается дважды или с LINQ. Это бездумный пуризм? Это как раз использование с умом, с заботой о том, кто будет код читать. И с четким критериями.

А вот ты предлагаешь использовать его вообще везде где только можно, оговорка "с умом" вообще появилась только в последней мессаге. Да еще и считаешь что венгерка может упростить отладку. 
Семантически ясные идентификаторы не должны включать в себя имя типа, они должны говорить о назначении переменных. Если ты действительно считаешь что знать о типе переменной разработчику не нужно - то тебя ждут больше проблемы при работе в команде. Переходи на VB, там давно есть late bound. 

Это сообщение отредактировал(а) PashaPash - 13.9.2008, 18:23


--------------------
PM MAIL WWW   Вверх
nikitao
Дата 13.9.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Цитата(source777 @  13.9.2008,  18:41 Найти цитируемый пост)
значит вам придётся писать тип дважды и не использовать Linq и анонимные классы

где я писал , что в Linq и анонимных нельзя использовать...вот ума не приложу  smile 



Цитата(Mayk @  13.9.2008,  11:15 Найти цитируемый пост)
в примере выше. Зачем писать тип дважды? Что это даёт?   smile 

Согласен, что ничего не дает. Просто мне то кажется , что не особо и мешает , если код - не помойка ( ну а если помойка , то тут ничо не поможет). Просто если типы простые типа string DateTime или int помоему разницы вообще нету. Ну а если там  такие плохочитаемые как  List<IMySuperPuperInterface> , так их обычно не так и много на "анализируемом" куске кода, так что тоже получается не мешает.

Это сообщение отредактировал(а) nikitao - 14.9.2008, 00:39


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Mayk
Дата 14.9.2008, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(nikitao @  14.9.2008,  03:08 Найти цитируемый пост)
List<IMySuperPuperInterface> , так их обычно не так и много на "анализируемый" кусок кода, так что тоже получается не мешает.

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

Перенос части аргументов,кстати, на новые строки в свою очередь уменьшает кол-во ....хммм... statement'ов, которые видятся за раз, что отвратительно сказывается на читабельности. 



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
MasterOfCode
Дата 15.9.2008, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(Mayk @ 13.9.2008,  08:31)
Цитата(nikitao @  13.9.2008,  04:41 Найти цитируемый пост)

Вот я тупой наверно. Я НЕ понимаю как это улучшает читабельность. Ну не понимаю я. обьясните.

Сравни 2 строчки кода(название типа сперто с хабра)
Код

var list = new List<IMySuperPuperInterface>(); 
List<IMySuperPuperInterface> list = new List<IMySuperPuperInterface>(); 

во второй - ненужное дублирование типа.  Который к тому же занимает много букв на экране. 
Много ненужных букв на экране = плохая читабельность.

Переменную ты объявляешь только один раз, а потом ее используешь энное кол-во раз.
И тогда 
Код

var list = new List<IMySuperPuperInterface>(); 
List<IMySuperPuperInterface> list = new List<IMySuperPuperInterface>(); 
//...
list.Add(pIMySuperPuperInterface); // тут уже пойдет одинакого, как для var, так и без него.
//только при отладке может вызвать некое неудобство.



--------------------
user posted image
PM ICQ   Вверх
Veitmen
Дата 15.9.2008, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: 3
Всего: 4



Ну про венгерку PashaPash, сказал верно все. 
Что касается var то порой использовать это удобно. Но только в том случае, когда явно видно какой тип все таки она будет принимать. В выше риведенном примере это явно демонстрируется. Но если что нибудь типа:
Код

var list = myClass.GetList();

то никаких выгод я не вижу. Да, надо правильно называть методы. Это бесспорно. Но если я использую чужой код? Да и в конце концов, даже если я узаю свой код, человек который будет читать мой код может не сразу понять что это за тип, даже если я правильно назову свой метод. В конце концов, явное указание типа позволяет делать имена функций короче. Потому что явно видно что это за лист будет.
Да, вы конечно можете сказать что можно сделать так:
Код

var list = new List<MyClass>();
list = myClass.GetList();

Но это дополнительный код. Это минус. 
PM MAIL ICQ   Вверх
Mayk
Дата 15.9.2008, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(MasterOfCode @  15.9.2008,  11:40 Найти цитируемый пост)

Переменную ты объявляешь только один раз, а потом ее используешь энное кол-во раз.

И что? Что из этого следует? Объясни как из кол-ва объявлений следует что var плох.

Цитата(MasterOfCode @  15.9.2008,  11:40 Найти цитируемый пост)
//только при отладке может вызвать некое неудобство.

Какое неудобство?  
Кто-то не может прочитать тип если он написан целый один раз а не всего лишь два? 

Предлагаю не останавливаться. И писать еще более удобный для отладки код:
Код

List<IMySuperPuperInterface> list =  (List<IMySuperPuperInterface>) (List<IMySuperPuperInterface>) (new List<IMySuperPuperInterface>()); 

And ze drims fainali keim tru!


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.