1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Предавать-ли в процедуру параметры при помощи класса?, Предавать-ли в процедуру параметры при помощи класса???
С точки зрения скорости исполнения процедуры, как правильнее организовать корректную работу процедуры с большим количеством изменяемых переменных?
1. Сформировать Class, и содержать в нем все необходимые переменные. Передавать в процедуру в качестве параметра Class. Теперь процедура работает с переменными, содержащимися в Class:
Код
MyProcedure( Class:MyClass ); begin Class.var1 := Class.var2 + Class.var3; End;
2. Определить переменные в начале программы НО НЕ передавать их в MyProcedure в качестве параметров, а позволить процедуре работать с внешними (для нее) переменным:
Под какими компилерами будет твоя программа компилироваться? (Кроме твоего "www.wld3.com", который очень странно обрабатывает стандартные конструкции языка... )
очень странно обрабатывает стандартные конструкции языка... )
Проверил еще раз. Оба способа передачи объекта в подпрограмму
Код
procedure Test( Cont :Container )
и
Код
procedure Test( var Cont :Container )
Работают одинаково...
Код
Type Container = class( TObject ) private protected public str :string; end;
procedure Test( Cont :Container ); begin Cont.str:='Test'; end;
var Cont :Container; Cont:=Container.Create;
Print(Cont.str); Test(Cont); Print(Cont.str);
Все-таки у меня остается не решенным вопрос: каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом…
Все-таки у меня остается не решенным вопрос: каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом
Как сказал Вольво зашей все данные в отдельный класс, а в нём определи методы - твои процедуры и функции.
У меня программа состоит из ОДНОГО главного цикла, в котором находится длинный список подпрограмм:
Код
FOR i:=0 to Max do begin Procedure1(); Procedure2(); ...... …… ProcedureN(); END;
И даже работа с файлами производится из процедур. Таким образом, абсолютно ВСЕ переменные, определенные (и заданные) в начале кода, оказываются внешними по отношению к процедурам
Вот и получается что варианта 2: 1. Позволить процедурам работать с внешними переменными: Все прозрачно + НЕ требуется выделение дополнительной оперативной памяти. Но возникает вопрос о корректности с точки зрения языка Pascal в целом. 2. Собрать мегазборку переменных Type=Record и передавать ее в процедуры. В этом случае с точки зрения Pascal все вроде как «тип-топ», но потребуется выделение дополнительной памяти, и возможно снизится общая скорость работы программы.
Оба варианта работают одинаково, в том смысле что вычислительный результат совпадает. Во время процесса оптимизации стратегии, программа запускается несколько сот/тысяч раз в цикле, что требует оптимизации выделения памяти и сокращения общего времени работы программы. Поскольку вся наша жизнь есть сплошной компромисс, то вопрос к Гуру от Pascal такой: Какой вариант предпочесть???