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

Поиск:

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


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


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

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



взволновала  smile  вот эта статейка на хабре 

http://habrahabr.ru/blogs/net/39231/

Интересно что у нас по этому поводу скажут smile 

ЗЫ
Там мне сказать не дают :'( ибо рег закрыт 


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


iOS Lead Developer
****


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

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



Интересная вещь, мне кажется, хотя, по моему мнению, снижает читабельность кода.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
QryStaL
Дата 11.9.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


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

Репутация: 14
Всего: 32



Цитата(mr.Anderson @  11.9.2008,  21:24 Найти цитируемый пост)
снижает читабельность кода.

это мягко сказано.

Как по мне, аргументация автора статьи недостаточно убедительна. Кроме спорного пункта "использование var приводит к уменьшению «шума» в коде", все остальное - слишком субъективно. А решарпером я не пользуюсь =)


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
nikitao
Дата 12.9.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вобщем пока что я очень рад , что я не один думаю так как думаю smile  


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


Эксперт
***


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

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



IMHO, var можно применять только тогда, когда тип переменной явно упоминается в той же строчке. В остальных случаях получится happy debugging для человека, который будет поддерживать код.


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


elwin
**


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

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



Помимо читабельности, это вызовет массу ошибок, если ты первый раз после объявления присвоил переменной значение int, а потом значение string, то компилятор ругаться матом будет. Если уж на то пошло, давайте везде object использовать... ыыы))  smile 


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


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Цитата(PashaPash @ 12.9.2008,  01:07)
IMHO, var можно применять только тогда, когда тип переменной явно упоминается в той же строчке. В остальных случаях получится happy debugging для человека, который будет поддерживать код.

var можно использовать только явно определяя тип (либо с анонимными типами, но это отдельная песня). Так что не волнуйся по другому просто не получится сделать.
PM MAIL   Вверх
MasterOfCode
Дата 12.9.2008, 10:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


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

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



интересно такой код скомпилится:

Код

var stringVar;
var intVar;
stringVar = "0";
intVar = 1;
stringVar = intVar;

скорее всего нет...


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


Intellectual feast
**


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

Репутация: 14
Всего: 32



Цитата(MasterOfCode @  12.9.2008,  10:57 Найти цитируемый пост)
интересно такой код скомпилится:

нет


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
PashaPash
Дата 12.9.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(HalkaR @  12.9.2008,  10:53 Найти цитируемый пост)
var можно использовать только явно определяя тип (либо с анонимными типами, но это отдельная песня). Так что не волнуйся по другому просто не получится сделать. 

Почувствуй разницу между "упомянуть" и "определить". Явно определить тип так, чтобы его видел компилятор, и явно упомянуть тип для человека на саппорте - разные вещи. Вот скажи, вот в этих строчках явно виден тип переменной? А ведь он там определен.
Код

var oldParent = currentElement.Parent;
var reader = dataStore.GetReader();

Кроме того, никто не застрахован от изменения стороннего API, и написание кода без явного упоминания типа переменной - самоубийство. Изменение double на int компилятор проглотит, но потом вылезут ошибки округления, при делении например. Вот хотя бы:
Код

var someNumber = 9;// 9.0, externalApiObject.GetSomeDurationInDays();
Console.WriteLine(someNumber / 2 * 2);

Понять всю опасность var просто - возьмите запущенный кусок кода из своего проекта, с 5-6 локальными переменными. поменяйте явное упоминание типов на var. Через две недели взгляните на него - если не возникнет сомнений относительно типов - то вы компилятор.

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


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


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


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

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



имхо автоматический вывод рулил, рулит и будет рулить.  Не понимаю паники выше отписавшихся. Наверное ocaml и python уже съели мой моск. 



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


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


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

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



Mayk,  видимо )))) меня  к примеру от слова var трясет )))))


Но вообще господа речь идет несколько о другом как я понял

речь идет не о повсеместном использовании var ,  а  об желательном использовании. Ну т е если это ведет к неопределенности как с int и double  то ясно что не надо юзать , а вопрос надо ли использовать в в таких случаях 

Код

SqlDataReader reader = new SqlDataReader();


или 

Код

var reader = new SqlDataReader();


лично я резко против )))


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


Эксперт
***


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

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



Цитата(Mayk @  12.9.2008,  12:12 Найти цитируемый пост)
имхо автоматический вывод рулил, рулит и будет рулить.
+много, сделали бы его в C# ещё помощнее, по аналогии с функциональными языками, а то с var в текущем варианте далеко не уедешь.  Хотя, как средство для улучшения читабельности, безусловно стоит применять.

Всем, кому мерещится, что var снижает читабельность и усложняет отладку, рекомендую обратиться к венгерской нотации, уверен, что она вам понравится...  smile 


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


elwin
**


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

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



Напишите хоть одну задачу где без ключевого слова var, не обойтись? Хочется узнать. smile


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


Эксперт
***


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

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



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

MasterOfCode, ты о чём? В CLR нет никаких изменений со времен .NET 2.0, все возможности C# 3.5 - это синтаксический сахар, поэтому твой вопрос лишён смысла. Рекомендую тебе почитать статью - http://rsdn.ru/article/philosophy/SyntacticSugar.xml
Более того, открою тебе страшную тайну, нет ни одной задачи, которую бы нельзя было решить на ассемблере, но можно на C#, тут вопрос времени и удобства, а не теоретической возможности.

Добавлено через 3 минуты и 13 секунд
Плюс ко всему, редко имеет смысл тип объекта сам по себе, гораздо важнее его интерфейс, т.е. набор методов, которые он имеет. Впрочем, это сложно объяснить тем, кто никогда не сталкивался с функциональным программированием...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
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   Вверх
source777
Дата 15.9.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(PashaPash @  13.9.2008,  18:03 Найти цитируемый пост)
Да еще и считаешь что венгерка может упростить отладку. 
Я вроде даже смайлик поставил, чтобы ты понял, что это издёвка над твоим пуризмом... 

Цитата(PashaPash @  13.9.2008,  18:03 Найти цитируемый пост)
Ты ж считаешь что StreamWriter - это "неуправляемый тип"
тут не более, чем разногласия в терминологии, можно говорить, что FileStream(про него речь шла) - "управляемая обёртка для неуправляемого ресурса", а можно и сократить... всё равно понятно, что имеется в виду.

Цитата(PashaPash @  13.9.2008,  18:03 Найти цитируемый пост)
а финализатор - это блок finally. 
Где это я такое говорил?


Цитата(PashaPash @  13.9.2008,  18:03 Найти цитируемый пост)
Ты можешь понять что делает чужой код, без знания о типах и интерфейсах переменных?
В принципе да, хотя и не в общем случае, а лишь в частном, когда идентификаторы обладают достаточной семантической ясностью. 
Возьмём простой пример:
Код

var dave = new Customer("dave");
var orders = dave.GetOrders();
decimal sum = 0;
foreach(var order in orders)
{
  sum += order.Price;
}

Я утверждаю, что данный код вполне ясен и без явного объявления типов, в данном случае нам достаточно знать, что GetOrders возвращает что-то IEnumerable<Order>, что и следует из его названия. Чтобы указать тип явно, у нас три пути:
1) держать весь API в памяти
2) воспользоваться столь не любимым (судя по всему даже презираемым) вами IntelliSense
3) найти декларацию метода(средствами VS, ну или если хочешь вручную)
Однако никакой выгоды от явного указания типа мы в данном случае всё равно не получим!


Цитата(PashaPash @  13.9.2008,  18:03 Найти цитируемый пост)
Я не предлагаю не использовать вар вообще
Эта оговорка появилась лишь в последнем сообщении, до этого было "можно, если ..., но всё равно не нужно"  smile 


Это сообщение отредактировал(а) source777 - 15.9.2008, 11:20


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


Эксперт
***


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

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



Цитата(source777 @  15.9.2008,  11:17 Найти цитируемый пост)
тут не более, чем разногласия в терминологии, можно говорить, что FileStream(про него речь шла) - "управляемая обёртка для неуправляемого ресурса", а можно и сократить... всё равно понятно, что имеется в виду.
И из этого следует, что надо вызывать FileStream.Close в финализаторе? Оффтоп и не смешно. Перечитай Рихтера. А насчет сокращений - сократить управляемый класс до неуправляемого ресурса - это как-то слишком смело smile.

Цитата(source777 @  15.9.2008,  11:17 Найти цитируемый пост)
Возьмём простой пример:
---snip--
Однако никакой выгоды от явного указания типа мы в данном случае всё равно не получим!

Фишка примера в том, что переменная orders тебе тут не нужна. Вставь вызов GetOrders прямо в foreach - и одной переменной станет меньше. И про тип гадать не придется.
А для sum ты тип почему-то указал явно, хотя он тоже выводится. Посмотри в комментах на хабре, там кто-то уже сделал баг - var sum=0; Хотя sum обладает вполне достаточной семантической ясностью - это ж сумма, что тут непонятного.
Цитата(source777 @  15.9.2008,  11:17 Найти цитируемый пост)
Эта оговорка появилась лишь в последнем сообщении, до этого было "можно, если ..., но всё равно не нужно" 

Когда это я писал "все равно не нужно"? Нужно, но только в паре вполне определенных случаев.


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


Эксперт
***


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

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



Цитата(PashaPash @  15.9.2008,  15:51 Найти цитируемый пост)
А для sum ты тип почему-то указал явно, хотя он тоже выводится.
Для примитивных типов, на мой взгляд, var несколько избыточен, хотя не спорю можно было написать var sum = 0m;  но не дало бы никакой выгоды...



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

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


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

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


 




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


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

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