forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Когда кода много (http://forum.boolean.name/showthread.php?t=13706)

pepel 12.11.2010 20:28

Когда кода много
 
Интересно как работают опытные программисты с большим колличеством кода, насколько быстро вы можете найти нужную функцию или изменить нужный параметр? делаете это на автомате или приходится напргать мозг? :rolleyes:
Просто допустим в 3д максе я могу отключить мозг и работать тупо на автомате.
Конечно много завит от структуры кода, сейчас пытаюсь его оптимизировать под себя, но когда куча кода мой мозг работает как пентиум 1 :-D :SOS:

Reks888 12.11.2010 20:34

Ответ: Когда кода много
 
Продвинутые IDE имеют такие полезные вещи, как "Поиск по всем файлам", "Закладки" и список всех функций/типов/констант/глобалов/локалов в текущем проекте.
Пользуемся IDEal или Protean, господа.

pepel 12.11.2010 20:44

Ответ: Когда кода много
 
не ну закладки то понятно.. я немного про другое

DeeJex 12.11.2010 20:50

Ответ: Когда кода много
 
Большой код профи не допустит, он разобьет код на инклуды.

Program23 12.11.2010 21:06

Ответ: Когда кода много
 
Инклуды же,ужаснейшая вещь,по крайней мере,мне. Намного удобнее будет пролистать код,или воспользоваться поиском,чем переключаться между инклудами. А еще,когда изменил чо-то, в зависимом от главного,инклуде,по привычке его и компилишь.Это так раздражает.
Может быть,и есть IDE,которые всегда запускают только установленный Main-код.Уверен в Protean это есть,чем я не пользуюсь.

den 12.11.2010 21:11

Ответ: Когда кода много
 
Зато можно создать инклуд с различными глобальными переменными, и с функциями. А потом в главном коде работать просто оболденно;)

Dzirt 12.11.2010 21:13

Ответ: Когда кода много
 
Цитата:

А еще,когда изменил чо-то, в зависимом от главного,инклуде,по привычке его и компилишь.Это так раздражает.
Есть горячая клавиша которая компилит твой мейн файл.(Ideal)

Плюс если все правильно организовать,то работать с инклудами одно удовольствие....єкономит массу времени.

Morganolla 12.11.2010 21:16

Ответ: Когда кода много
 
Я потому и перешел с Блица на С++, что мой проект стал разрастаться как снежный ком, и я в нем утонул. Инклуды в блице очень ограничены!
В C++ есть отличные фичи которые позволяют делать большие пректы -
- ООП
- модульность (раздельная компиляция модулей и сборка линковщиком)
- библиотеки...
- и т.д и т.п.

Одно только ООП решает половину проблем...)

IGR 12.11.2010 21:17

Ответ: Когда кода много
 
при реализации относительно большого проекта который требует написания большого объема кода главное структуризация и иерархия !! Сначало нужно выполнить структуризацию на уровне логики !!
Не нужно все сваливать все в один супер алгоритм под названием ИГРА (допустим мы про игры говорим, да) !! Нужно все разделить - боты, итемы, магия, статика и т.д. !!
Сделать один глобальный (статический) объект/класс который будет управлять чем то одним !!
Помимо управления он должен обмениватся инфой с другими такими же глобальными объектами как он !! Это сильно упрощяет дело !! Основной программе остается лишь сделать взаемодействие между ними !! Все будет работать как одно целое и независимо !!
Еще плюс в том что это способствует переносимости кода в другие проекты и тд !!
Что касается реалищации:
Нужно стратся разделять по файлам, давать им внятные названия !!
Мало отличающиеся части кода лучше вынести в функцию но добавить параметр !!
Задавать константы а не хардкодить какоето значение в коде а потом искать его полчаса во всех местах !!
Очень важно называть все своими именами (что содержит переменная, что выполняет функция) !! И тд.. И еще много чего что неудобно писать с телефона !! :) Это конечно мое имхо которое мне помогает !! У каждого свои подходы !! Делитесь !!

Dzirt 12.11.2010 21:21

Ответ: Когда кода много
 
Цитата:

Сообщение от IGR (Сообщение 168361)
при реализации относительно большого проекта который требует написания большого объема кода главное структуризация и иерархия !! Сначало нужно выполнить структуризацию на уровне логики !!
Не нужно все сваливать все в один супер алгоритм под названием ИГРА (допустим мы про игры говорим, да) !! Нужно все разделить - боты, итемы, магия, статика и т.д. !!
Сделать один глобальный (статический) объект/класс который будет управлять чем то одним !!
Помимо управления он должен обмениватся инфой с другими такими же глобальными объектами как он !! Это сильно упрощяет дело !! Основной программе остается лишь сделать взаемодействие между ними !! Все будет работать как одно целое и независимо !!
Еще плюс в том что это способствует переносимости кода в другие проекты и тд !!
Что касается реалищации:
Нужно стратся разделять по файлам, давать им внятные названия !!
Мало отличающиеся части кода лучше вынести в функцию но добавить параметр !!
Задавать константы а не хардкодить какоето значение в коде а потом искать его полчаса во всех местах !!
Очень важно называть все своими именами (что содержит переменная, что выполняет функция) !! И тд.. И еще много чего что неудобно писать с телефона !! :) Это конечно мое имхо которое мне помогает !! У каждого свои подходы !! Делитесь !!

Аминь. :)

Gector 12.11.2010 21:32

Ответ: Когда кода много
 
О вкусах не спорят).

pepel 12.11.2010 21:55

Ответ: Когда кода много
 
Цитата:

Сообщение от IGR (Сообщение 168361)
Сделать один глобальный (статический) объект/класс который будет управлять чем то одним

это как?

а вообще спасибо за инфу , насчет иерархии это да, наверно в ней вся проблема, чтобы найти нужный элемент приходится долго вспоминать в какой последовательности его искать

реально чем больше разростается проект тем больше времени уходит на вспоминание где что лежит

ABTOMAT 12.11.2010 22:07

Ответ: Когда кода много
 
Когда делал РПГ на блице у меня были инклуды:
NPC - поведение персонажей и игрока
Inventory - инфентарь и предметы
Dialogs - диалоги персонажей
Venicles - колёсные средства передвижения, залезание/вылезни, багажники
Physics - всё что относится к загрузке физических объектов из собственного формата (и его загрузчик) и к регдоллу
Math - математические функции типа теоремы Пифагора и т.д.
Vegetation - всё что относится к росту травы/деревьев/плодов
Pathfind - зачатки путенаха
И ещё с пяток, что уже не вспомнить.
Использовал Visual Blitz
Справа список типов, функций, глобалов и констант.
Сворачивание тел функций и типов.
По-моему, удобно, вполне.

pepel 12.11.2010 22:18

Ответ: Когда кода много
 
ABTOMAT я кстати тож использую visual blitz удобная чтука
Вот только сейчас начал пользоваться списком справа , раньше приходилось листать на нужную функию вручную )
Плюс добавил основные точки с помощью labels :
основные настройки
загрузка уровня
цикл
обновление Действий
renderworld
список функций

Кстати сворачивания типов у меня почемуто нету =\

Я пока использую инклуд с глобальными переменными и инклуд с главным меню, но похоже зря это сделал, т.к. теперь незнаю как сделать возвращение в главное меню из игры =\

impersonalis 12.11.2010 22:22

Ответ: Когда кода много
 
Цитата:

Сообщение от Program23 (Сообщение 168357)
Инклуды же,ужаснейшая вещь,по крайней мере,мне. Намного удобнее будет пролистать код,или воспользоваться поиском,чем переключаться между инклудами. А еще,когда изменил чо-то, в зависимом от главного,инклуде,по привычке его и компилишь.Это так раздражает.
Может быть,и есть IDE,которые всегда запускают только установленный Main-код.Уверен в Protean это есть,чем я не пользуюсь.

это диагноз и приговор

Hurrit 12.11.2010 22:35

Ответ: Когда кода много
 
На лекциях говорили, что одна функция, должна выполнять одну задачу, тогда легче будет исправлять ошибки, и следить за кодом. Собственно говоря, я всегда придерживаюсь трех правил:
1. Выносить всё возможное в функции.
2. Давать функциям, типам и переменным нормальные имена.
3. Если функция приняла окончательный вид, то выносить функцию в отдельный инклуд файл.
И благодаря этим трем функциям, я легко через 10 минут могу разобраться в коде годовой давности.

Crayzi 12.11.2010 22:51

Ответ: Когда кода много
 
Цитата:

Сообщение от Hurrit (Сообщение 168376)
На лекциях говорили, что одна функция, должна выполнять одну задачу, тогда легче будет исправлять ошибки, и следить за кодом. Собственно говоря, я всегда придерживаюсь трех правил:
1. Выносить всё возможное в функции.
2. Давать функциям, типам и переменным нормальные имена.
3. Если функция приняла окончательный вид, то выносить функцию в отдельный инклуд файл.
И благодаря этим трем функциям, я легко через 10 минут могу разобраться в коде годовой давности.

+
Я тоже стараюсь все что относится к одному типу действий выносить в функции и задавать им параметры, правда восновном так поступаю со сложными частями кода, чтобы было проще править либо с повторяющимися более 1 раза.

ffinder 12.11.2010 23:11

Ответ: Когда кода много
 
А вы правда отличаете функциональное программирование от процедурного?
Думаю, что не все.

Если у вас функции изменяют глобальные массивы и переменные это не "совсем" функции. Это процедуры.

Функция это трансформация. Черный ящик с входами и одним выходом. Принимает аргументы - возвращает результат.

Хорошая программа это несколько модулей с функциями по одной-две-три строчки каждая. Это - идеал.

Если функции простые и каждая делает всего одну вещь - их легко комбинировать, что уменьшает количество кода в разы.

pepel 12.11.2010 23:15

Ответ: Когда кода много
 
ffinder спасибо .оч полезно . не знал этого

EvilChaotic 12.11.2010 23:34

Ответ: Когда кода много
 
Пора разбавить картинками все вышесказанное!
Ы. Управление всеми наземными единицами. Открыл одну функцию для наглядности, справа почти все бб'шники. Удачи в больших проектах!

IGR 13.11.2010 01:11

Ответ: Когда кода много
 
Цитата:

Сообщение от pepel (Сообщение 168368)
это как?

Ну в блице классов как таковых нет !! Да и класс не обезательно нужен !! :) я имел ввиду что высший по иерархии объект должен управлять теми кто ниже !! Но никак не наоборот !!

pepel 13.11.2010 01:13

Ответ: Когда кода много
 
ааа ясно.

Mr_F_ 13.11.2010 17:44

Ответ: Когда кода много
 
http://www.insidecpp.ru/antipatterns/spaghetti/

Hurrit 13.11.2010 22:22

Ответ: Когда кода много
 
Цитата:

Сообщение от ffinder (Сообщение 168384)
А вы правда отличаете функциональное программирование от процедурного?
Думаю, что не все.

Если у вас функции изменяют глобальные массивы и переменные это не "совсем" функции. Это процедуры.

Функция это трансформация. Черный ящик с входами и одним выходом. Принимает аргументы - возвращает результат.

Хорошая программа это несколько модулей с функциями по одной-две-три строчки каждая. Это - идеал.

Если функции простые и каждая делает всего одну вещь - их легко комбинировать, что уменьшает количество кода в разы.

Кстати, функция - это вроде бы модуль, который возвращает значение, а процедура - модуль, который не возвращает, так?

ffinder 14.11.2010 01:37

Ответ: Когда кода много
 
Цитата:

Сообщение от Hurrit (Сообщение 168545)
Кстати, функция - это вроде бы модуль, который возвращает значение, а процедура - модуль, который не возвращает, так?

Ни процедура ни функция не являются модулем. Остальное верно.

Hurrit 16.11.2010 20:00

Ответ: Когда кода много
 
Цитата:

Сообщение от ffinder (Сообщение 168582)
Ни процедура ни функция не являются модулем. Остальное верно.

Не знал как по-другому назвать их обеих, разве что подпрограммами.

moka 17.11.2010 13:35

Ответ: Когда кода много
 
Давно уже б3д не использую из-за его убоговсти как языка.
Дома, BlitzMax, всё выношу в классы, никогда не работаю с глоабльными списками, лучше создать пару списков и хранить их в озу (это копейки памяти), и бегать по ним, чем иметь какой-нибудь убер список.
Пишу код модульно, таким образом что вставить например между двумя связями двух классов, посреднеческий класс, например система распределяющая списки объектов на сектора, для оптимизации друг-друго зависемых просчётов, такое не состовляет никаких проблемм.
Пишу обычно классы в стиле "интерфейсов", как таковой он может работать самостоятельно, даже если я пишу его в прототипе, это не составит труда его внедрить потом таким какой он есть в готовый продукт, только используя функции доступа к информации которая нужна для основной логики программы, или для визуализирования.
Код нужно писать таким образом чтобы он был более структуризирован.
Например в C# никогда не ссылаюсь к параметрам эллемента, всегда использую функцию set/get посредника. Такой подход всегда даст возможность удобно читать код, и делает сам класс, более как интерфейс отвечающий на запросы.
К сожалению Blitz3D подобного не предастовляет, можно конечно извращаться с хэндлами там и т.п. но это уже быдло кодерство..
Ну и естественно стиль, придерживаюсь таких правил:
все приватные и локальные переменные начинаются с "_", и маленькой буквы. В середине переменной никогда не использую "_", а использую каждую первую букву слова в имени переменной заглавной, например: _videoPreviewEventEx - локальная пременная относиться к ловле событий из элемента предпросмотра видео.
Для функций и классов всегда использую первую как заглавную: OpenFile, и т.п.
Имена дают о себе понять.
Например есть у нас класс по работе с DirectShow фильтрами, и там есть класс для записи видео с камеры: Video.Capture.Start(_fileName);
Что нибудь такого рода.


Часовой пояс GMT +4, время: 06:53.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot