|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
||||||
Обработка переменной процедурного уровня другой процедурой23.06.2011, 16:50. Показов 1587. Ответов 12
Метки нет (Все метки)
Добрый день, уважаемые коллеги.
При написании программы возникло сомнение: правильно ли я офоромляю код? Возможно, так работать нельзя и такой код впоследствии будет нечитабельным для других? Код выглядит приблизительно так:
Т.е. я объявляю переменные процедурного уровня, а затем передаю ссылки на них в другую процедуру, которая производит операции и заполняет переменные значениями. Это, понятное дело, просто пример. Но суть такова. Делаю я это за тем, что процедура, названная здесь MainSub имеет большой размер и ее а) неудобно писать - пока разбираешься с отдельными частями, забываешь про целое, и б) неудобно потом разбирать - в огромной процедуре через какое-то время перестаешь понимать что происходит. Поэтому я разбил процедуру на части и решил проблему с переменными так, как показано выше. Вопросы такие: 1) насколько позволительно с точки зрения программирования менять значения переменных процедурного уровня в других процедурах? 2) Если так делать нельзя, то как быть? Объявлять переменные как Public?
0
|
||||||
| 23.06.2011, 16:50 | |
|
Ответы с готовыми решениями:
12
Присваивание переменной процедурного типа Обработка нескольких событий одной процедурой
|
|
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
|
|
| 23.06.2011, 18:41 | |
|
Gibboustooth,
наоборот, как раз и надо разбивать программу на процедуры: всегда должна быть процедура Main и функционирующие процедуры.
0
|
|
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
||
| 23.06.2011, 18:49 [ТС] | ||
0
|
||
|
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
|
||
| 23.06.2011, 19:15 | ||
|
1
|
||
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
|
| 23.06.2011, 19:17 [ТС] | |
|
Я понял, спасибо.
0
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 24.06.2011, 15:04 | |
|
Работать написанное будет вполне корректно. Передавать возвращаемые процедурой значения по ссылкам, по-мне, так это не самый удачный стиль. Мои советы:
1. Там, где нет необходимости передавать переменную по ссылке обратно в вызывающую процедуру - передавайте по значению (флаг ByVal перед именем переменной в декларации вызываемой процедуры). Это позволит в некоторых случаях не допустить ошибки. 2. Процедуры попробуйте заменить на функции, которые будут возвращать значение. Можно предусмотреть и проверку возвращаемого значения на код ошибки, как это сделано в Win API. 3. Если возвращать приходится много данных, то где-то будет уместно передавать структуру, массив или буфер по ссылке. 4. Если модуль кода дальше не планируется расширять (код разбросан по разным модулям), то допустимо использовать переменные с областью выдимости в пределах модуля. 5. Или можете ничего не менять в Вашем коде, просто припишите перед вызовом примечание, что вызываемая функция может изменять свои параметры.
1
|
|
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
||
| 24.06.2011, 15:22 [ТС] | ||
|
0
|
||
|
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
|
|
| 24.06.2011, 15:42 | |
|
А еше лучше сделать все классом. Тогда будет меньше писанины. Не нужно будет передавать ничего. Вообще твой вариант не очень привлекательный тем, что у тебя очень много параметров у функций - Это будет создавать путаницу, потому что ты на глаз не сможешь определить что ты передал как объекты, с которыми работаешь, а что реальные параметры функции.
Добавлено через 4 минуты Так, к слову. У меня есть один проект на VBA, который занимал очень много места - около 6000 строк. Начинал его писать вместе с началом обучения VBA. Потом узнал, что на VBA есть классы =) Переписал все на них и число строк стало 3000 (плюс там я еще всю концепцию конечно переделал =) но ключевым аспектом переделования было введение классов), причем строки довольно легкие, потому что не передаю кучу лишних параметров в процедуру. Все стало очень структурировано и вообще супер, я стал намного быстрее ориентироваться в своем коде.
0
|
|
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
|
| 24.06.2011, 15:53 [ТС] | |
|
К сожалению, не умею работать с классами. Я вообще не программист - просто по работе начал пользоваться VBA, а теперь вообще вся работа с ним связана
Если есть литература по классам (особенно по их практическому использованию) - был бы очень благодарен.
0
|
|
|
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
|
|
| 24.06.2011, 16:02 | |
|
1
|
|
|
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
|
|
| 24.06.2011, 16:34 [ТС] | |
|
Спасибо, ознакомлюсь на выходных.
0
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 24.06.2011, 17:34 | |
|
Прошу прощения у Gibboustooth, что вмешиваюсь в тему...
Belthazor4, Так много строк кода. Какого типа классы вы придумали для Excel (по сути и смыслу) и за счет чего код так сократился? Классы по идее должны сокращать место за счет многократного использования их кода в разных местах программы. Есть какие-то базовые вещи, которые каждому приходится писать как изобретать велосипед? Я просто заметил, что большие куски кода у меня часто повторяются - приходиться по сто раз (уже машинально и на память) снова и снова писать куски кода. Можно что-то путевое придумать?
0
|
|
|
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
|
|
| 24.06.2011, 18:02 | |
|
По сути я использую классы в 3 случаях
1) Тупо main класс в котором все связанной с работой всего макроса (Раньше так не делал - было влом переписывать написанное, а вот сейчас проект делаю так ). Суть - просто оболочка всего, для упрощения взаимодействия процедур с друг другом - как раз пример того, с чего началась эта тема 2) класс оболочка определенного процесса - если есть какой-нибудь процесс, состоящий из несколько процедур (к примеру выгрузка листов из excel в PP) Для сокращения кода взаимодействия процедур друг с другом 3) если я действую с множеством однотипных материй, имеющих много разнородных параметров. собственна цель - обобщение этих параметров, удобство инициализации, удобно еще в деструкторе таких классов указывать всякие действия типа освобождения переменных (set .. = nothing) и к примеру включения скринапдейта. Деструктор удобен тем, что его не нужно вызывать, он сам отрабатывается при завершении. Пример использования таких классов - есть динамический лист отчета, на нем есть график, еще лист с данными, там пивот и т.д. Таких листов отчета - много, поэтому целесообразно было завести универсальный класс для них. Если там интересно че, пиши лучше в аську, здесь не очень ужобно говорить монологами. Диалог это как то лучше все же. ICQ
231782044
1
|
|
| 24.06.2011, 18:02 | |
|
Помогаю со студенческими работами здесь
13
Автоматические заполнение из другой таблицы процедурой
Как присвоить имя переменной равное аргументу другой переменной? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|