|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Есть функция: Код: pascal 1. 2. 3. 4. 5. 6.
вызов с параметром работает Код: pascal 1. 2. 3. 4.
вызов без не работает :) Код: pascal 1. 2. 3. 4.
Можно как-то заделать или перегрузкой? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 08:14 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox, указатели function TForm1.myf(s: Pointer; var res: String): boolean; var st:^string; begin st:=s; if s <> nil then begin res:=st^; result:=True; end else Result:=False end; procedure TForm1.Button1Click(Sender: TObject); var s:String; begin if myf(nil, s) then ShowMessage(s); end; procedure TForm1.Button2Click(Sender: TObject); var s, s1:String; begin s1:='hjgjhghjg'; if myf(@s1, s) then ShowMessage(s); end; ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 09:16 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox, PString(nil)^ ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 09:39 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox, с указателями точно можно Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
вот что вывелось Код: pascal 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 12:08 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antoxМожно как-то заделать или перегрузкой? Лучше перегрузкой. Параметры по ссылке специально были придуманы чтобы в них нельзя было передать "ничего". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 12:31 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Соколинский Борис antox, PString(nil)^ Спасибо, работает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 12:50 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox Соколинский Борис antox, PString(nil)^ Спасибо, работает :) @(nil)^ - универсальный вариант. Но лучше не злоупотреблять. Если это твой код - добавь перегрузку. Если чужой - ты не можешь гарантировать, что функция пережует такой ввод. К примеру, она может безусловно занулять параметр и лишь потом проверять другие. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 13:55 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox, Не надо никаких хаков, указателей и других извратов. Объявить локальную переменную S:string и передавать туда. За указатели в таких местах - гнать из професии. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 14:52 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 Не надо никаких хаков, указателей и других извратов. Объявить локальную переменную S:string и передавать туда. За указатели в таких местах - гнать из професии. Это точно программист ответствует? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 17:05 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
wadman Это точно программист ответствует? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 17:13 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
wadman, если про меня, то опыт паскаль / дельфи > 35 лет. Я не про указатели вообще, сам их очень даже использую там, где они к месту. А тут явный изврат только для того, чтобы показать что они знают, как это делается. Такие эмоции, потому что не далее как вчера помогал вычищать подобное говно менее опытному коллеге, который с этим корячился несколько часов с кодом, в которым тоже были когда то созданы проблемы на ровном месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 17:35 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 если про меня, то опыт паскаль / дельфи > 35 лет. 35 лет и вместо рабочего примера ушат помоев. Да и "локальная переменная" - вообще чудо. В функции/процедуре? В её локальную переменную? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 17:37 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
wadman, Рабочий пример уже был в исходном сообщении, вторым по счету, я на это и указал. Да, это называется локальная переменная. В вызывающей фунции. Н.Вирт "Язык паскаль". Я такое изучал в 9 классе в 1984 году, а в ответах на исходное пошел какой-то трэш про то что нужно учить указатели и хаки, за которые в рабочем коде надо пороть. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2021, 18:14 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal antox пропущено... Спасибо, работает :) @(nil)^ - универсальный вариант. Но лучше не злоупотреблять. Если это твой код - добавь перегрузку. Если чужой - ты не можешь гарантировать, что функция пережует такой ввод. К примеру, она может безусловно занулять параметр и лишь потом проверять другие. Код мой, но перегрузка добавит кучу ненужного кода и непонятно, какой в этом смысл ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 05:21 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 antox, Не надо никаких хаков, указателей и других извратов. Объявить локальную переменную S:string и передавать туда. За указатели в таких местах - гнать из професии. Чем не нравится? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 05:22 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Может есть какие-то другие, менее затратные, способы вернуть несколько значений из функции? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 05:24 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox Может есть какие-то другие, менее затратные, способы вернуть несколько значений из функции? Вернуть запись и использовать только нужные поля?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 09:32 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox Может есть какие-то другие, менее затратные, способы вернуть несколько значений из функции? менее затратные по сравнению с чем. В чём затраты измеряются? Если затраты измеряются с тактах CPU, то наименее затратный способ: объявить record и в нем описать необходимые поля. Если затраты изменяются в объёме работы программиста (в том числе на отладку), то менее затратный: использовать SuperObjects (правда, в него не завезли многие типы данных), либо (внимание! реклама!) модуль ParamsUtils.pas . Использование вариантов я считаю более затратным, т.к. слишком легко ошибиться с индексом параметра и очень сложно отлаживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 09:43 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
DmSer Хм, объявлять параметры по именам руками, без Code Completion, без контроля ошибок... Экономия времени программиста налицо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 09:46 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
alekcvp DmSer Хм, объявлять параметры по именам руками, без Code Completion, без контроля ошибок... Экономия времени программиста налицо. Так в Delphi кроме record и Variant ничего встроенного нету. На каждый случай объявлять новый record - то ещё удовольствие! От Variant вообще тошнит! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 09:52 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
DmSer На каждый случай объявлять новый record - то ещё удовольствие! Вообще не вижу проблемы. Весь WinAPI на этом построен. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 10:20 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Жаль, что даже с новыми инлайн переменными нельзя так сделать Код: pascal 1. 2. 3.
или даже так Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 10:27 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox swame2 antox, Не надо никаких хаков, указателей и других извратов. Объявить локальную переменную S:string и передавать туда. За указатели в таких местах - гнать из професии. Чем не нравится? А за что мы боролись? За сокращение длины кода? В результате нагородили забор из указателей вместо объявления одной однобуквенной переменной. Это твой пример элементарный, а в рабочем коде таких параметров будет скорее всего несколько, и все это будет нечитаемо + при может измениться число параметров, а вариант с указателем уже будет указывать на другу переменную, скомпеидится, а потом будет падать, причем это место может сразу не обнаружиться. Это как раз тот вариант конструкций, про который в С говорят "выстрел в ногу" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:01 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Жаль, что даже с новыми инлайн переменными нельзя так сделать или даже так [/src] Не понимаю чем плохо заполнить значения рекордов в паре строчек перед вызовом функции. Все понятно и читаемо. А так все в одной строке - макаронине, при рефакторинге и сравнении версий изменений боль при разборе какой параметр на каком месте и не перепутали ли порядок. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:07 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
alekcvp antox Может есть какие-то другие, менее затратные, способы вернуть несколько значений из функции? Вернуть запись и использовать только нужные поля?.. Я предпочитаю именно этот способ. Преимущества: 1. Очень часто набор параметров передается по цепочке методов. В моем проекте например, добавление нового параметра в цепочку вызовов могло повлечь изменения в сотнях виртуальных методов, в десятках модулей. Никому этим заниматься не хотелось, поэтому у разработчиков при необходимости был соблазн использовать нехорощие костыли, типа передачи через глобальную переменную, или использование какого-нибудь малоиспользуемого параметра в разных контекстах для разных параметров, с надеждой , что они не пересекутся. В варианте с записью просто добавляем новое поле, заполняем где надо и вот оно уже везде в цепочке. 2. При наличии большого числа параметров в вызове при рефакторинге легко запутаться в порядке параметров, особенно если они однотипные, и как я уже писал. в сотнях методов, и набор и порядок параметров может быть разный, с каждым разбираться. 3. Скорость. запись почти всегда передается по ссылке как const или var. Что будет много объявлений записей проблем не вижу, если нормально продумать, можно использовать одно объявление для нескольких схожих контекстов, не страшно если есть лишние поля, на скорость не влияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:24 |
|
|
start [/forum/topic.php?fid=58&msg=40091652&tid=2037098]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 436ms |
0 / 0 |