Здравствуйте, Аноним, Вы писали:
А>А чтобы этого не было, нужна база для таких ревью — стандарты кодирования.
Это понятно, вопрос в объеме. Когда это превращается в бесконечный набор писаных и неписаных правил, становится тяжело.
А>Но в целом, я не знаю, что ты понимаешь под придирками к коду.
Когда мне говорят, что вместо
HashMap myMap = new HashMap();
надо писать
Map myMap = new HashMap();
и при этом начинают прикрываться ОО-принципами, я это воспринимаю как придирку.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>А чтобы этого не было, нужна база для таких ревью — стандарты кодирования.
А>Это понятно, вопрос в объеме. Когда это превращается в бесконечный набор писаных и неписаных правил, становится тяжело.
Согласен.
А>>Но в целом, я не знаю, что ты понимаешь под придирками к коду.
А>Когда мне говорят, что вместо А>
А>HashMap myMap = new HashMap();
А>
А>надо писать А>
А>Map myMap = new HashMap();
А>
А>и при этом начинают прикрываться ОО-принципами, я это воспринимаю как придирку.
Если это java (судя по тегам), то я в ней профан.
Но если Map определяет интерфейс для любых других "мапов",
то замечание в общем-то справедливо.
Re[11]: хотите развею мифы о работе в Microsoft, Redmond WA
От:
Аноним
Дата:
16.06.04 08:15
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Если это java
Да
А>Map определяет интерфейс для любых других "мапов",
Да
А>то замечание в общем-то справедливо.
Вот это весьма сомнительно.
А как ты отнесешься к
IDictionary myMap = new Hashtable();
(C#), выглядит уже не так красиво.
Re[12]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Если это java А>Да
А>>Map определяет интерфейс для любых других "мапов", А>Да
А>>то замечание в общем-то справедливо. А>Вот это весьма сомнительно. А>А как ты отнесешься к А>
А>IDictionary myMap = new Hashtable();
А>
А>(C#), выглядит уже не так красиво.
Дело не в красивости.
В случае
Map map = new HashMap();
можно заменить HashMap на любой производный от Map класс. Например на TreeMap, если для объектов в контейнере стало сложно строить хэш-функцию.
А в твоём первоначальном примере это будет сделать не так просто. Особенно если и в остальных случаях ты используешь HashMap вместо Map.
Так что это не придирка а вполне уместное замечание.
То же самое и для C#.
Никогда не задумывался, зачем тим лиду нужны эти "придирки"?
Re[10]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>А чтобы этого не было, нужна база для таких ревью — стандарты кодирования.
А>Это понятно, вопрос в объеме. Когда это превращается в бесконечный набор писаных и неписаных правил, становится тяжело.
А>>Но в целом, я не знаю, что ты понимаешь под придирками к коду.
А>Когда мне говорят, что вместо А>
А>HashMap myMap = new HashMap();
А>
А>надо писать А>
А>Map myMap = new HashMap();
А>
А>и при этом начинают прикрываться ОО-принципами, я это воспринимаю как придирку.
И правильно делают. Такой код — в жесткий рефакторинг.
А если вы решите переходить на другую реализацию Map, кто потом будет править твои HashMap повсеместно???
Одно дело поменять в нескольких местах создание нового Map, совсем другое дело поменять повсеместно, где они используются. Собственно, советую подумать на причинами, по которым существуюет интерфейс Map. Надеюсь, тебе самому тогда станет понятно, что ты не прав.
Re[13]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, postmaster, Вы писали:
P>Никогда не задумывался, зачем тим лиду нужны эти "придирки"?
В общем лиду надо еще уметь объяснять.
То как замечания высказываются — это тоже очень важно.
"Напрягаться" и пытаться понять друг друга надо обоим, и лиду и девелоперу.
Re[13]: хотите развею мифы о работе в Microsoft, Redmond WA
P>можно заменить HashMap на любой производный от Map класс. Например на TreeMap, если для объектов в контейнере стало сложно строить хэш-функцию. P>А в твоём первоначальном примере это будет сделать не так просто. Особенно если и в остальных случаях ты используешь HashMap вместо Map.
То есть идеально видимо object map = new HashMap();
?
Re[14]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, <Аноним>, Вы писали:
А>То есть идеально видимо object map = new HashMap();
нет. идеально так, как этот объект используется.
например у интерфейса Map есть методы A1, A2, A3.
HashMap реализует эти методы плюс имеет собственный A4
если в твоем случае созданный объект myMap использует базовые методы A1 — A3, то объявлять 100% надо как Map();
если A4 — то возможно резонно объявить и как A4, но это зависит от ситуации.
... << RSDN@Home 1.1.3 stable >>
Re[13]: хотите развею мифы о работе в Microsoft, Redmond WA
От:
Аноним
Дата:
16.06.04 09:54
Оценка:
Здравствуйте, postmaster, Вы писали:
P>В случае P>
P>Map map = new HashMap();
P>
P>можно заменить HashMap на любой производный от Map класс.
Заменить на TreeMap можно будет без проблем в любом случае, это ведь локальная переменная, я еще понимаю если это параметр метода. А если мне понадобится какой-нибудь метод, который есть в HashMap, но нет в интерфейсе?
Re[11]: хотите развею мифы о работе в Microsoft, Redmond WA
От:
Аноним
Дата:
16.06.04 10:03
Оценка:
Здравствуйте, mikkri, Вы писали:
M>А если вы решите переходить на другую реализацию Map, кто потом будет править твои HashMap повсеместно???
Править придется в любом случае, HashMap создается явно, а не вытаскивается из какого-нибудь factory и в этом случае я хочу видеть объект такой, какой он есть, а не прикрытый всякими интерфейсами.
Re[14]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, postmaster, Вы писали:
P>>В случае P>>
P>>Map map = new HashMap();
P>>
P>>можно заменить HashMap на любой производный от Map класс. А>Заменить на TreeMap можно будет без проблем в любом случае, это ведь локальная переменная, я еще понимаю если это параметр метода. А если мне понадобится какой-нибудь метод, который есть в HashMap, но нет в интерфейсе?
Ты же не написал, что это локальная переменная. Может это поле класса?
А так аккуратным нужно быть во всем — тебе же потом будет проще.
Re[12]: хотите развею мифы о работе в Microsoft, Redmond WA
Hello, !
You wrote on Wed, 16 Jun 2004 10:03:45 GMT:
M>> А если вы решите переходить на другую реализацию Map, кто потом будет M>> править твои HashMap повсеместно??? > Править придется в любом случае, HashMap создается явно, а не > вытаскивается из какого-нибудь factory и в этом случае я хочу видеть > объект такой, какой он есть, а не прикрытый всякими интерфейсами.
Угу, и разницы, в одном месте править, или в 10, ты тоже не видишь
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>Угу, и разницы, в одном месте править, или в 10, ты тоже не видишь
Всё равно в 10 местах править придётся, ведь никакой фабрики нет
К тому же, не нужно опасным образом (даункастинг) приводить тип при передаче этого объекта в методы, принимающие HashMap. Вот здесь, действительно, компилятор уже не поможет при смене реального типа.
Собственно, я вообще считаю эту практику вредной. Не обижайтесь, но я часто это вижу у людей, недавно освоивших ООП и пытающихся впихнуть псевдо-объектно-ориентированный код в каждую строчку.
Re[15]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, mogadanez, Вы писали:
M>если в твоем случае созданный объект myMap использует базовые методы A1 — A3, то объявлять 100% надо как Map(); M>если A4 — то возможно резонно объявить и как A4, но это зависит от ситуации.
Нет, я вообще перестал что-то понимать в этом мире. Если объект является экземпляром класса A4 и кроме этого еще и использует специфический для A4 интерфейс, то его возможно резонно объявить как А4, да к тому же и "зависит от ситуации"?
Re[15]: хотите развею мифы о работе в Microsoft, Redmond WA
M>например у интерфейса Map есть методы A1, A2, A3. M>HashMap реализует эти методы плюс имеет собственный A4
M>если в твоем случае созданный объект myMap использует базовые методы A1 — A3, то объявлять 100% надо как Map();
С этим я тоже не согласен. Даже не то что не согласен насчет 100% (ну это совсем очевидно), но я бы сказал, что "в большинстве случаев имеет смысл объявлять как HashMap". Имплементация базовых методов может отличаться и я не хочу вводить в заблуждение и себя и людей, которые будут читать этот код впоследствии. Поменяется класс — компилятор крикнет и я поменяю код создания экземпляра (что тебе тоже придётся делать), вот и всё...
Re[14]: хотите развею мифы о работе в Microsoft, Redmond WA
Здравствуйте, Andy77, Вы писали:
A>Собственно, я вообще считаю эту практику вредной. Не обижайтесь, но я часто это вижу у людей, недавно освоивших ООП и пытающихся впихнуть псевдо-объектно-ориентированный код в каждую строчку.
Кстати если посмотреть как написан к примеру Tomcat, то там используется стиль ArrayList list = new ArrayList(); С другой стороны в Eclipse соглашения нет, используется оба стиля, так что ценность такого code review ничтожная, а лично для меня так и вовсе отрицательная.
Re[14]: хотите развею мифы о работе в Microsoft, Redmond WA
Hello, Andy77!
You wrote on Wed, 16 Jun 2004 16:41:13 GMT:
S>> Угу, и разницы, в одном месте править, или в 10, ты тоже не видишь
A> Всё равно в 10 местах править придётся, ведь никакой фабрики нет
В 2 — если писать HashMap myMap = new HashMap(); или в 1 — если писать Map
myMap = new HashMap();. Или в 10, если использовать специфичные для HashMap
методы.
A> К тому же, не нужно опасным образом (даункастинг) приводить тип при A> передаче этого объекта в методы, принимающие HashMap. Вот здесь, A> действительно, компилятор уже не поможет при смене реального типа.
Если там есть методы, требующие HashMap, тогда никакого разговора — писать
надо HashMap myMap. Если эти методы требуют на самом деле всего лишь Map, а
объявлены как требующие HashMap — тогда методы тоже надо переписать. Сразу,
как только это выяснилось.
A> Собственно, я вообще считаю эту практику вредной.
Какую конкретно практику?
A> Не обижайтесь, но я часто это вижу у людей, недавно освоивших ООП и A> пытающихся впихнуть псевдо-объектно-ориентированный код в каждую A> строчку.
Здравствуйте, Andy77, Вы писали:
A>Здравствуйте, Sergey, Вы писали:
S>>Угу, и разницы, в одном месте править, или в 10, ты тоже не видишь
A>Всё равно в 10 местах править придётся, ведь никакой фабрики нет
Нет.
Ты этот объект в 10-ти местах создаёшь? 10 раз написав "new HashMap()"?
Если да, то у тебя явные проблемы с качеством кодирования.
Если нет, то менять надо будет ровно в одном месте.
A>К тому же, не нужно опасным образом (даункастинг) приводить тип при передаче этого объекта в методы, принимающие HashMap. Вот здесь, действительно, компилятор уже не поможет при смене реального типа.
И TreeMap и HashMap реализуют интерфейс Map. Какие проблемы?
A>Собственно, я вообще считаю эту практику вредной. Не обижайтесь, но я часто это вижу у людей, недавно освоивших ООП и пытающихся впихнуть псевдо-объектно-ориентированный код в каждую строчку.
Ответь пожалуйста на вопрос: тебе нужен некий абстрактный Map, или тебе нужен конкретный HashMap?
Если тебе нужен именно HashMap, то позволь полюбопыствовать: какие методы, специфичные для HashMap, ты используешь?
Re[15]: хотите развею мифы о работе в Microsoft, Redmond WA