![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Доброго времени суток. В последнее время заметил за собой одну вещь, которая мне не нравится. В погоне за универсальностью и гибкостью (как мне кажется =)) я часто увлекаюсь и получается крайне непонятный с первого взгляда (а некоторым и с пятого) код. Например, я пытаюсь увязать некую информацию об объекте через std::map и получаю объявления вида
я, конечно, оставляю комментарии, но все равно. мне как-то пришлось править код, который я писал год назад. и мне понадобилось минут 20, чтобы понять,что к чему. Зато сама переделка потребовала минимум кода и в одном месте. Так я вот я хотел бы узнать. Насколько такие структуры нормальны в плане использования, можно ли их плодить по несколько штук на класс, например, или все же лучше писать максимально понятный код. P.S. самому мне кажется, что тут должен быть какой-то баланс, но сам я его не чувствую. Спасибо. Это сообщение отредактировал(а) xTr1m - 21.5.2012, 13:36 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Баланс быть должен. Но начинать всегда надо именно с понятного кода. Например, в твоем случае std::pair использовать нет никакого смысла. Лучше под это вообще отдельную структуру выделить с адекватными названиями полей. |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Кто-то из классиков (Александреску, кажется) говорил (не цитирую, а по памяти):
Честно говоря, не вижу в приведённом примере ничего страшного. Тем более, что рядом стоит понятный и подробный комментарий. Если же при использовании ты пишешь как-то так:
а не так
то вообще никаких проблем не вижу Это сообщение отредактировал(а) borisbn - 21.5.2012, 15:38 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
bsa, это для меня всегда было вопросом. То есть, если есть две переменные, то что лучше: пара и отдельная структура. Структура вроде бы понятней, но нужно ее объявить, обнулить переменные, а иногда нужна не структура, а класс, значит еще и конструктор (иногда деструктор). А пара она, вроде как, лаконичней.
borisbn, как раз частенько получается как во втором варианте, так как, например, foundIt->second.second используется только один раз, то я всегда думал, что нет нужды объявлять ссылку и тут же ее передавать. Как тут быть? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
xTr1m, эта ссылка как раз "именует" поле std::pair'а. Нормальный компилятор на 99,9(9)% превратит это в foundIt->second.second.
Зато тому, кто будет читать код, не потребуется лезть в объявление map'а, чтобы посмотреть, что же там за тип, и что написано в комментарии по поводу значений этого типа. И потом, ты ж наверняка знаешь и такое изречение: "Код гораздо чаще читается, чем компилируется" (как-то так, за точность не ручаюсь). Так что, делай код понятным. Не экономь на размере исходника, и тебе не будет страшен Александресковский маньяк-убийца )) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
вот за это спасибо. очень хороший аргумент, буду знать, что говорить в таких случаях =)) |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Кстати, а действительно ли данное утверждение у указателям?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
В исполняемом коде ссылка и указатель - одно и то же. Отличаются они только синтаксисом использования на языке высокого уровня. Так что с указателем должно быть всё то же самое, что и с ссылкой. И вообще (раз уж начинать цитировать классиков) "преждевременная оптимизация - источник многих бед" -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Пиши подробные doxygen комментарии и генери документацию, тогда быстрее поймёшь что к чему. Это сообщение отредактировал(а) Леопольд - 21.5.2012, 20:44 -------------------- вопросов больше чем ответов |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Хорошо, что есть такие люди, как Result - единственный не посмеялся, а указал мне на глупость...
да, конечно же, не Александреску, а Макконелл говорил про маньяка
Result, спасибо за поправочку. Это сообщение отредактировал(а) borisbn - 22.5.2012, 10:05 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Я обычно использую pair<> (в таких случаях) только если эта структура данных используется локально - в пределах одной/двух функций (или методах). Если больше, и тем более, если выходит во внешний интерфейс класса (или модуля), то делаю отдельную структуру
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |