Передача параметров в подпрограммы
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Передача параметров в подпрограммы
Нужно передавать параметрами строки. Результат обработки - строки. Хочется делать оптимально.
Вариант 1. Описываем формальный параметр на прием типа String. При этом выделяется дополнительная память на этот параметр.
Параметр на возврат значения описываем через Var. Выделяется ли при этом память на формальный параметр?
Вариент 2. Передавать адреса на параметры. вроде оптимальнее, но больше возни.
Посоветуйте как правильнее, оптимальнее, или не заморачиваться с этим. "Да сколько там тех символов, можно хоть как" Такой вариант тоже устроит.
Вариант 1. Описываем формальный параметр на прием типа String. При этом выделяется дополнительная память на этот параметр.
Параметр на возврат значения описываем через Var. Выделяется ли при этом память на формальный параметр?
Вариент 2. Передавать адреса на параметры. вроде оптимальнее, но больше возни.
Посоветуйте как правильнее, оптимальнее, или не заморачиваться с этим. "Да сколько там тех символов, можно хоть как" Такой вариант тоже устроит.
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Есть ли разница при оптимизации кода? Использовать Var вместо Out, даже если параметр будет только отдаваться с подпрограммы? То есть Out использует для удобства читания кода или есть еще что-то?
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
*vmr писал(а):GAMER писал(а):То есть Out использует для удобства читания кода или есть еще что-то?
Он очищает строку перед входом в процедуру
То есть, повышается качество, ухудшается производительность (лишняя операция)? А если параметры не строки?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную. Если использовать out - не будет, т.к. исходное значение переменной в этом случае не имеет значения.
И, если переменная действительно не инициализирована, ее очистка перед вызовом ф-ции - это пустая операция, не ухудшающая быстродействие.
И, если переменная действительно не инициализирована, ее очистка перед вызовом ф-ции - это пустая операция, не ухудшающая быстродействие.
- *vmr
- постоялец
- Сообщения: 168
- Зарегистрирован: 08.01.2007 00:46:07
- Откуда: Киев
- Контактная информация:
Sergei I. Gorelkin писал(а):Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную.
Это как? var подразумевает же инициализацию в outer-scope! Например, если мы оттуда читаем значение, а потом только пишем, то "ругания" компилятора — это уже какойто бред
*vmr писал(а):Sergei I. Gorelkin писал(а):Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную.
Это как? var подразумевает же инициализацию в outer-scope! Например, если мы оттуда читаем значение, а потом только пишем, то "ругания" компилятора — это уже какойто бред
Я так понимаю, что когда мы не передаем данные в подпрограмму, а только получаем из нее значение через var параметр, - тогда компилятор ругается.
Отдельно большой респект и благодарность для Sergei I. Gorelkin. Спасибо за многочисленные советы и тонкие подсказки!!!
Sergei I. Gorelkin писал(а):И, если переменная действительно не инициализирована, ее очистка перед вызовом ф-ции - это пустая операция, не ухудшающая быстродействие.
Любое действие ухудшает быстродействие
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Процедура работает с out-параметром, как с обычной переменной. Записав туда что-то, она имеет полное право это что-то прочитать или изменить.
Кроме того, для строк это неважно, а для интерфейсов конкретные моменты удаления/добавления ссылок очень даже имеют значение.
Менять тут что-то очень чревато. А вот выкинуть бессмысленный вызов очистки неинициализированной переменной действительно вполне реально. Думаю, что когда-нибудь это будет реализовано.
Кроме того, для строк это неважно, а для интерфейсов конкретные моменты удаления/добавления ссылок очень даже имеют значение.
Менять тут что-то очень чревато. А вот выкинуть бессмысленный вызов очистки неинициализированной переменной действительно вполне реально. Думаю, что когда-нибудь это будет реализовано.
