![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
У меня есть программа, но работать с ней мне совсем не удобно, есть ли какие то специальный способы, хитрости, как сделать код лучше.
К стати вот и сам код: #include"TXLib.h" // Используемые функции
+ И еще желательно скажите мне ошибки, которые я туту допустил(т.е. те, где можно было сделать лучше ) Это сообщение отредактировал(а) m1kle - 23.5.2007, 19:43 |
|||
|
||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Способ, работающий в 99% случаев - переписать заново. +1.
Слишком много параметров функции, сделай передачу структуры в функцию. Информативность имен страдает. Слишком много констант в коде. Комментарии к работе функций желательно переносить в раздел объявлений функций, а не описания их тел. Дальше не осилил... |
||||
|
|||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Для начала начни пользоваться тэгами "код", потому что читать невозможно. А так на первый взгляд: - функция Action длиной где-то на 90% кода - разделить на мелкие функции и передавать им нужные параметры - в той же функции целый экран переменных - используй лучше структуры (и параметров меньше передавать надо будет) - функция Man с 13(!) параметрами это жесть (см. пункт 2) -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Да, кстати. Наверху в форме ответа есть кнопочка "код". Применяй ее, и твой код станет гораздо более читабельным для остальных форумчан.
|
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Стоп, а как сделать передачу из структур в функции? (сорри за нубоватость, только начинаю.
1,2, спасибо. |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
что то типа :
|
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Лучше так:
или так, если пишешь на Си:
|
||||
|
|||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Помойму структурами наоборот хуже будет, и долше.
Насчет остального согласен. А есть еще какие то хитрости |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
bsa,
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
13 (или сколько там...) параметров, которые передаются в функцию - не дело. Все параметры запихни в одну структуру и передавай указатель на неё в функцию. |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
JackYF
Я не понял, а как стрктуру передать в функцию. Значит создаю я стрктуру
Может похоже на бред, но насколько я понял надо как то так. Это сообщение отредактировал(а) m1kle - 24.5.2007, 11:55 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Точно. Это бред и есть. Тебе дали 100% рабочий вариант. Там все написано:
|
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
А эти структуры хоть ускорят работу программы, а то столько текста, а толку 0.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| adLucem |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 17.4.2007 Где: Украина, Донецк Репутация: нет Всего: 5 |
Читал - плакаль, ниасилил. Афтар выпей йаду.
(Прошу меня правильно понять - комментирую в том же стиле, в котором написана программа.) Я конечно понимаю, что всем нужно с чего то начинать, но проблема не в том, что некоторые люди пишут, проблема в том, что они считают нужным это показывать другим людям (перефраз Чехова). JackYF, Я думаю эту программу ничто не сделает ни читабельной ни расширяемой кроме переписывания. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Разбиваю функцию Action() на много маленьких функций, но им придется передавать кучу параметров, что делать?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Подумать, может ты неправ ;-) |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Bsa, не, это точно, мне же самому удобнее будет, еще можно как я понял улучшить код, делаю вот такие штуки, вместо старых ифов:
Только не понимаю какой символ за что отвечает, если можно, поясните. Вот по типу этих ифов, наверняка есть какие другие хитрости, я знаю их множество, очень они мне нужны, посветите, пожалуйста. Это сообщение отредактировал(а) m1kle - 30.5.2007, 17:25 |
|||
|
||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Удобнее передавать кучу параметров? И чем это лучше if-а? На две буквы короче? ИМХО код должен быть прежде всего легок для чтения и понимания людьми, удобен в использовании (12 параметров этому не способствуют), а потом уже эффективен и.т.д Причем если код прост, понятен и удобен, то он скорее всего уже эффективен (я не имею ввиду использование плохих алгоритмов итд). Если действительно хочешь улучшить код, то это очень хороший совет Тут дело не в хиртостях "по типу этих ифов", а в всём дизайне, подумай как можно упростить код так, что бы не было необходимости передавать много параметров и писать длинные вложенные циклы с кучей if-ов (это называется "спагетти-код"). Например передавай ссылку на структуру, меняй в специализированных функциях только нужные переменные, а не все сразу. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| m1kle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
nickless
1) Разбить большую функцию на много маленьких, помойму это очень удобно и разумно. 2) "Хитрости" тоже для удобства, и уменьшения длинны кода ( если он не длинный, с ним легче имхо работать ). 3) А насчет структур. А что плохого в передаче многих парметров. Стрктуры это уменьшение эффективности программы(время выполнения кода), и куча лишних строчей. Можешь раскритиковать, буду только благодарен ( я новечок в этом деле ) |
|||
|
||||
| MAKCim |
|
||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
а вот кстати проверил и получил такие результаты
разница налицо Добавлено через 2 минуты и 53 секунды
будешь когда-нибудь на WinAPI писать ( -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||
|
|||||||||||
| bsa |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Неудачный пример. Лучше попробовать такой:
Так как в твоем случае компилятор серьезную оптимизацию сделал. Замена 0 на 1 по флагу через:
|
||||||||||
|
|||||||||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
твоя прога написанна по принципу структурного программирования.. т.е. есть ряд данных и куча функций для работы с этими данными.. для улучшения наглядности да и последующего сопровождения я рекомендую следующее:
1. нарисовать блок схему (в крупных проектах она просто необходима, чтобы не сойти с ума) 2. перейти к Объектно Ориентированному Программированию (ООП) по блок схеме легко находить уязвимые места и это позволит абстрагироваться от кода, позволит сосредоточится на идеи.. это важняк!! не ленись делать блок схемы.. это так же важно как и комментарии.. первое приемущество ООП над структурированным программированием заключается в ИНКАПСУЛЯЦИИ данных в один объект, что повысит как читабельность так и управляемость.. и к тому же ты сможешь размножать эти объекты в любом количестве.. потом тебе на помощь придет НАСЛЕДОВАНИЕ и ПОЛИМОРФИЗМ, может, тоже придет.. учи ООП.. важняк!! ;) Это сообщение отредактировал(а) fish9370 - 31.5.2007, 20:54 -------------------- undefined |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
bsa,
это все понятно, я не спорю пример этот показательный и тривиальный: по сути на пустом месте в одном случае - оптимизация, во втором - работа через одно место Это сообщение отредактировал(а) MAKCim - 31.5.2007, 09:39 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| nickless |
|
||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Я тоже решил проверить, только со включенной оптимизацией
И никакой разницы -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||
|
|||||||
| Dronchik |
|
|||
![]() Звукач ёмаё ![]() ![]() Профиль Группа: Участник Сообщений: 451 Регистрация: 1.5.2007 Репутация: 0 Всего: 37 |
И ещё СТЛ. -------------------- Вместо слов делай дело, от которого ты фанатеешь. (с) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |