|
|
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Ну коли на форуме тихо пока.... Решился показать себя полным чайником и спросить про субж в контексте вызовов процедур и функций. Собственно, я знаю, в чем разница, я понимаю, что объекты передаются по ссылке и т.п. Но дело в том, что если мне не нужна была передача параметров по ссылке, я вообще не ставлю перед параметрами ничего (что там по умолчанию попало, то и то). Но в обсуждениях на другие темы иногда мелькает, что надо так-то или так-то. Соответственно вопрос: какие принципы, какие соображения, как кошерно и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 14:41 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
По умолчанию как раз по ссылке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 14:58 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
AntonariyПо умолчанию как раз по ссылке. Это я знаю (вроде бы не во всех, кстати, случаях). Но чем это плохо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 14:59 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Shocker.ProЭто я знаюЭто заявление противоречит: авторесли мне не нужна была передача параметров по ссылке, я вообще не ставлю перед параметрами ничего авторвроде бы не во всех, кстати, случаяхВо всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 15:13 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Antonariy [quot]Это я знаю Это заявление противоречит: если мне не нужна была передача параметров по ссылке, я вообще не ставлю перед параметрами ничего Не противоречит. Я ставлю явно ByRef для себя, чтобы видеть, что эта процедура что-то возвращает в параметрах (типа OUTPUT в SQL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 15:16 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Как так? Если НЕ НУЖНА, то пишут ByVal явно. То, что ты ничего не возвращаешь, не значит, что значение в процедуру не передается по ссылке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 15:19 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
> Автор: Shocker.Pro > (вроде бы не во всех, кстати, случаях). Во всех, это объектные ссылки всегда передаются по ссылке. Даже если явно указать ByVal. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 15:35 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносВо всех, это объектные ссылки всегда передаются по ссылке. Даже если явно указать ByVal.Привет. Нет, объектные ссылки не являются исключением. Сравни: Class1: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 16:05 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
> Автор: Бенедикт > Нет ... Сравни: Так и знал, что кто-то ткнёт носом Согласен. Не прав. Я имел в виду что в процедуру не передается копия объекта, как это происходит в С++, а только константный указатель на объект. Что с точки зрения обсуждаемого вопроса, на мой взгляд, является именно передачей по ссылке. Ведь изменения происходят с тем-же объектом, а не с его копией. Но при явном указании ByVal при объектном параметре делает сам параметр константным. Что вообще-то тоже не плохо, иногда. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 16:43 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
AntonariyТо, что ты ничего не возвращаешь, не значит, что значение в процедуру не передается по ссылке. Та не. Я пишу ByRef для того, чтобы ВИДЕТЬ, что есть параметр для вывода (чисто для удобства). Ну а по факту он передается ByRef в обоих случаях, это понятно. AntonariyЕсли НЕ НУЖНА, то пишут ByVal явно. Вот меня и интересует, а в каких случаях лучше использовать ByVal (не берем ситуации, когда параметр меняется внутри процедуры). Ну например с точки зрения быстродействия, ресурсов, еще чего-нить.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 17:22 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
C точки зрения быстродействия нужно тестировать конкретные процедуры. В разные времена я получал разные результаты. Насколько я понимаю, строки быстрее передавать byref (не нужно выделять память под локальную переменную), все остальное — byval. Ну и правильнее использовать byval у публичных членов классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 17:31 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
AntonariyНу и правильнее использовать byval у публичных членов классов. А это из каких соображений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 17:33 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Чтобы, не зная что там на самом деле делает метод, сторонний разработчик мог быть уверен, что параметр byref действительно возвращает что-то полезное, а не объявлен так из лени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 17:40 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Считаю, что лучше во всех случаях использовать ByRef , так как в теле функции (процедуры) не выделяется память под "передаваемые" переменные; ByVal использовать в тех случаях, когда над передаваемыми переменными необходимо произвести некие "манипуляции", но без изменения исходных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 19:59 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
.Михаил.Считаю, что лучше во всех случаях использовать ByRef , так как в теле функции (процедуры) не выделяется память под "передаваемые" переменные;Это бабка надвое сказала . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 20:43 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Antonariy, полагаю, Михаил имеет ввиду экономию памяти (что тоже спорный вопрос для коротких переменных), а ты - производительность. Полюбому при ByRef должен выделяться новый виртуальный указатель, хоть и на ту же переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 20:51 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Shocker.ProAntonariy, полагаю, Михаил имеет ввиду экономию памяти (что тоже спорный вопрос для коротких переменных), а ты - производительность.Возможно, но при нынешних объемах оперативки это экономия на спичках. Производительность важнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2010, 20:59 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
По моему имхо как ByVal нужно передавать всё что <= Long а остальное ByRef, на сколько я знаю передача идёт через стек и ссылка на любую переменную = Long ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2010, 05:16 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
А я считаю что нужно ставить тот квалификатор, который не допускает неоднозначного трактования кода. Причем ставить всегда явно. Что-бы изучая чужой код не гадать, передача ByRef обоснованна или программист просто забыл написать ByVal. Переменная изменится и нужно делать копию перед передачей или можно смело передавать оригинальную переменную. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2010, 10:33 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Вспомнил, кстати, одну особенность ByRef ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2010, 01:01 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
И еще одну особенность вспомнил - передал как-то элемент массива в качестве единичного значения парамета RaiseEvent (по умолчанию ByRef) и получил ошибку: This array is fixed or temporarily locked ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2010, 01:11 |
|
||
|
ByVal vs. ByRef
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос А я считаю что нужно ставить тот квалификатор, который не допускает неоднозначного трактования кода. Причем ставить всегда явно. Что-бы изучая чужой код не гадать, передача ByRef обоснованна или программист просто забыл написать ByVal. Переменная изменится и нужно делать копию перед передачей или можно смело передавать оригинальную переменную. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2010, 19:11 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36634960&tid=2159762]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 386ms |

| 0 / 0 |
