Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как не надо писать код 
:(
    Опции темы
Ignat
Дата 18.3.2006, 06:52 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Это не вопрос, а скорее крик души.
Месяца два с половиной, в свободное от работы время, мучаю проект. И вот, похоже, настал конец терпению.
Чем больше разбираюсь в этом коде, тем больше хренею (другое слово не подберешь).
Яркий пример того, как не надо писать.
По порядку:

1. Видимо, все знание автора об отличиях С от С++ сводится к наличию единственного класса, единственный экземпляр которого инстанцирован в структуру(!), что само по себе нормально, за исключением того вопроса на фига это там было нужно, для меня так и
осталось загадкой.

2. Догадайтесь как обстоят дела с выделением памяти? Именно, незабвенный malloc. По некоторому стечению обстоятельств, функций free я обнаружил меньше :\

3. С потоками такая же напряженнка, как и с выделением new. #include <stdio.h> и точка, нафиг нам стримы?

4. Собственно от чего я сегодня опупел - static-функции вне класса. Честно сознаюсь, никогда так не извращался, посему тот факт, что я её фиг увижу за пределами единицы трансляции поверг меня в уныние. Нэймспейсы, видимо, отменили специально для "аффтара". Для чего это вообще делалось, так и не понял.

5. Об RTTI тоже автору ничего не известно. Следствие - около полусотни варнингов об опасном присваивании при компиляции.

6. Никакого намека на STL. Я, конечно, рад что в программе так классно реализованы операции с массивами, массивами указателей, массивами указателей на указатели, указателями на массивы указателей на указатели. Но, блин, чтоб выбрать элемент по имени,
мне перебор прикажете делать?

7. Отдельная песня - это имена переменных и функций. Ни один шпион не догадается. Если комменты не прочитает. Вот только комменты в .h, а нужно работать с реализацией.
Вот как вы думаете, зачем нужен следующий код:
void stdexitcls(char s, float pt, float sl, int bth)
{ sexord=1; sexi=s; sexpt=ptt(pt); sexsl=ptt(sl); sexbrs=bth; };
Вот я тоже не телепат. Смотрим объявление, например:
char sexi; // standard exit id
Вот ведь, блин, а я уж было подумал... Оказывается sexi и отношения к сексу не имеет, разве что церебральному.

8. Вернёмся к классу. Убедившись, что править что-то в этом коде сродни подвигам Геракла, вместе взятым есессно, решил воспользоваться одним из базовых столпов ООП - полиморфизмом. Унаследовал класс, написал свою реализацию нужных мне методов, а вот не переопределенные методы вдруг перестали работать. Удивительно? А мне нет. Те члены класса, которыми они пользуются были объявлены в приватной секции, а совсем не protected.

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

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



--------------------
Теперь при чем :P
PM   Вверх
chipset
Дата 18.3.2006, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4067
Регистрация: 11.1.2003
Где: Seattle, US

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



С чем я встречался:
9. Переопределение оператора new/delete -- руки отрывать.
10. switch на 10 вариантов.
11. Функции принимающие 10 (да-да, 10) параметров.
Цитата(Ignat @ 17.3.2006, 20:52 Найти цитируемый пост)
Блин, по скромной оценке кода больше тысячи строк... Как дальше с этим работать просто загадка тысячелетия. Но если назвался груздем...

Если там всего 1000 строк лучше переписать к чертям собачьим, такое и рефакторить низзя.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Ignat
Дата 18.3.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(chipset @ 18.3.2006, 07:09 Найти цитируемый пост)
Если там всего 1000 строк лучше переписать к чертям собачьим, такое и рефакторить низзя.

Ну это я сильно поскромничал, 1000 строк - это только та часть, с которой я работаю, даже, наверное 1500-2000 будет точнее, остальное было скомпилено в либы и благопулучно забыто. Общее количество строк в проекте (только .cpp и .с файлы, без учета хидеров) 14 225. Если это дело реверсить, то придется поднимать всё. А мой неокрепший организм такого мазохизма не вынесет...


Цитата(chipset @ 18.3.2006, 07:09 Найти цитируемый пост)
11. Функции принимающие 10 (да-да, 10) параметров.

Фунция, на которой я споткнулся в п.4 принимает 13 параметров.

Цитата(chipset @ 18.3.2006, 07:09 Найти цитируемый пост)
10. switch на 10 вариантов.

Здесь я натыкался на switch из 25-27 вариантов, хотя ИМХО это не страшно. Если задача отправить мессагу об ошибке, то самый приемлимый вариант.



--------------------
Теперь при чем :P
PM   Вверх
Mayk
Дата 18.3.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Пинать. Аффатру явно забыли сообщить что имена переменных можно делать из >6 символов и читабельными


Цитата(Ignat @ 18.3.2006, 10:52 Найти цитируемый пост)
Как мне дальше разгребать?

Цитата(chipset @ 18.3.2006, 11:09 Найти цитируемый пост)

Если там всего 1000 строк лучше переписать к чертям собачьим, такое и рефакторить низзя.

+1
Верни это на ту помойку из которой..... на родину вообщем.





Цитата(Ignat @ 18.3.2006, 16:38 Найти цитируемый пост)

Здесь я натыкался на switch из 25-27 вариантов, хотя ИМХО это не страшно. Если задача отправить мессагу об ошибке, то самый приемлимый вариант.

а как же map<ErrorID, string> и exception::what()?



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


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(Mayk @ 18.3.2006, 13:25 Найти цитируемый пост)
map<ErrorID, string> и exception::what()?

Посыпаю голову smile

ЗЫ кстати, exception отсутствует, зато есть глобальная функция FatalError. С однозначной реакцией умереть нафик, даже если это не нужно.


--------------------
Теперь при чем :P
PM   Вверх
DeadSoul
Дата 18.3.2006, 13:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 11



Цитата(Ignat @ 18.3.2006, 06:52 Найти цитируемый пост)
char sexi; // standard exit id

smile


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Athlon
Дата 18.3.2006, 20:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



если ты разгребаешь opensource код, то это типичная ситуация smile
а вообще, хочется всем пожелать побольше внимания уделять комментариям !!!
PM MAIL ICQ   Вверх
Earnest
Дата 20.3.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Что делать:
если исходный код работает правильно, лучше его не трогать, а написать свой фасад или адаптер. Причем сначала спроектировать интерфейс, не глядя в это г., а потом попробовать реализовать его.

Если неправильно - забыть про него совсем и переписать.


--------------------
...
PM   Вверх
S.A.P.
Дата 20.3.2006, 18:20 (ссылка) |   (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 71



Часто на работе сталкиваюсь с такими комментариями одного товарища:
1. // Пока не конец.
2. // В массив.
3. // Составляем запрос.
4. // Всё...

и т.д. И ни одного толкового комментария. Лучше вобще их не писать тогда smile .
PM MAIL   Вверх
Ignat
Дата 20.3.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(Earnest @ 20.3.2006, 18:06 Найти цитируемый пост)
если исходный код работает правильно,

Работает правильно.

Цитата(Earnest @ 20.3.2006, 18:06 Найти цитируемый пост)
а написать свой фасад или адаптер.

Вот это я и делаю, но в процессе приходится выяснять логику, тут и начинается свистопляска.

Цитата(Earnest @ 20.3.2006, 18:06 Найти цитируемый пост)
Причем сначала спроектировать интерфейс, не глядя в это г.,

Очень ценное замечание. Спасибо, так и поступлю. smile

Цитата(Earnest @ 20.3.2006, 18:06 Найти цитируемый пост)
Если неправильно - забыть про него совсем и переписать.

14 тыс строк?



--------------------
Теперь при чем :P
PM   Вверх
Earnest
Дата 20.3.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Ignat @ 20.3.2006, 18:24 Найти цитируемый пост)
14 тыс строк?

Не факт, что в результате будет столько же.
Но поскольку
Цитата(Ignat @ 20.3.2006, 18:24 Найти цитируемый пост)
Работает правильно.

то, конечно, лучше не трогать, не смотря на
Цитата(Ignat @ 20.3.2006, 18:24 Найти цитируемый пост)
но в процессе приходится выяснять логику, тут и начинается свистопляска.

А кому сейчас легко? smile smile smile



--------------------
...
PM   Вверх
DeadSoul
Дата 20.3.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 11



Цитата(Earnest @ 20.3.2006, 18:06 Найти цитируемый пост)
Что делать:
если исходный код работает правильно, лучше его не трогать, а написать свой фасад или адаптер. Причем сначала спроектировать интерфейс, не глядя в это г., а потом попробовать реализовать его.

Если неправильно - забыть про него совсем и переписать.


Earnest, а если надо что-то изменить в поведение этой функции? А рефакторинг провести нереально?


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
chipset
Дата 21.3.2006, 01:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4067
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(DeadSoul @ 20.3.2006, 12:45 Найти цитируемый пост)
Earnest, а если надо что-то изменить в поведение этой функции? А рефакторинг провести нереально?

Мы живем не в идеальном мире, рефакторинг нужно проводить только когда его нужно проводить а не просто потому-что так хочеться (ну если конечно, у тебя это не хобби)


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
UnixBeginner
Дата 21.3.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть прикольная книженция о том, как желательно оформлять исходный код программ.
Вот только не нашел как тут файлик присоеденить, так что если кому нужна (она небольшая *.doc),
могу скинуть или выложить где скажите smile

PM MAIL WWW ICQ   Вверх
np9mi7
  Дата 21.3.2006, 13:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Цитата
Цитата(Ignat @ 18.3.2006, 16:38 Найти цитируемый пост)

Здесь я натыкался на switch из 25-27 вариантов, хотя ИМХО это не страшно. Если задача отправить мессагу об ошибке, то самый приемлимый вариант.

а как же map<ErrorID, string> и exception::what()?
, а файл ресурсов?

Цитата
11. Функции принимающие 10 (да-да, 10) параметров.
, иногда в *.dll для независимости от клиента приходиться писать и больше, так что это в зависимости от задачи, на мой взгляд;

12) Hard Code (сообщения, числа и.т.д.);
13) Non Const Global Variable (просто бесит что вместо стека используется глобальная свалка - функциональное программирование);
14) Memory Leak (только стратегия владения и сборка мусора);
15) Native Implementation Dependence (бесит, когда пишут код зависимый от реализации);

Это сообщение отредактировал(а) np9mi7 - 21.3.2006, 13:38


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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