|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
alekcvp DmSer Хм, объявлять параметры по именам руками, без Code Completion, без контроля ошибок... Экономия времени программиста налицо. Неистово плюсую ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:28 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:32 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 Не понимаю чем плохо заполнить значения рекордов в паре строчек перед вызовом функции. Все понятно и читаемо. А так все в одной строке - макаронине, при рефакторинге и сравнении версий изменений боль при разборе какой параметр на каком месте и не перепутали ли порядок. Не плохо, просто сахар и сокращение визуального шума. Вообще львиная доля фич любого современного языка - это сахар, без которого можно обойтись. Код: pascal 1. 2. 3. 4. 5. 6. 7.
Код: pascal 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:39 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal, Да, вторая конструкция выглядит лучше, и согласен, если она предшествует вызову, а не находится внутри него, тогда она не противоречит тому о чем написал. Еще лучше было бы, если бы ее можно было убрать в секцию объявления переменных, а не кода. Я для такой инициализации обычно использую псевдоконструктор записи. Но там проблемка если параметров больше 2-4 - как я писал - с количеством параметров уже в конструкторе ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:56 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив В чем проблема объявить record? при необходимости можно использовать и вложенные. Не нужны для этого случая кортежи, поверь. потом будут лишние сложности в поддержке кода. Нужен максимально строгий контроль компилятором типа параметров. Вот тут предложили типа кортежа в ParamUtils. Я сам баловался таким псевдообобщением лет 20 назад, потом все это оказалось пшиком. Но там это было более оправдано, потому что объекты протаскивались через COM объкектную модель, а там добавить параметр в устоявшийся код на 2 порядка сложней, чем добавить параметр в рекорд. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:03 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
alekcvp DmSer На каждый случай объявлять новый record - то ещё удовольствие! Вообще не вижу проблемы. Весь WinAPI на этом построен. Согласен. Я неверно описал цели ParamsUtils. Основная фишка не в том, что с его помощью можно вернуть несколько параметров, а в том, что можно вернуть произвольное количество параметров (либо передать в функцию произвольное количество параметров). А в этом случае к параметром удобнее всего обращаться по именам. Удобно использовать при организации взаимодействия между модулями (например при передаче данных из EXE в DLL), когда заранее все возможные параметры не предусмотришь. Это в 100 раз удобнее, чем использовать голый Variant. При использовании record можно добиться такой же цели, но нужно передавать через указатель и в самом начале предусмотреть номер версии либо размер. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:51 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
DmSer alekcvp пропущено... Вообще не вижу проблемы. Весь WinAPI на этом построен. Согласен. Я неверно описал цели ParamsUtils. Основная фишка не в том, что с его помощью можно вернуть несколько параметров, а в том, что можно вернуть произвольное количество параметров (либо передать в функцию произвольное количество параметров). А в этом случае к параметром удобнее всего обращаться по именам. Удобно использовать при организации взаимодействия между модулями (например при передаче данных из EXE в DLL), когда заранее все возможные параметры не предусмотришь. Это в 100 раз удобнее, чем использовать голый Variant. При использовании record можно добиться такой же цели, но нужно передавать через указатель и в самом начале предусмотреть номер версии либо размер. Конечно, передавать record между EXE в DLL не годится. Мне часто приходится передавать данные и между двумя exe. Мое решение на это случай - одинаковый record ( или объекты) на стороне EXE в DLL, при передаче он сериализуется в строку, например через JSON. Обращение внутри каждого модуля к типизированным полям рекорда. Добавление параметра делается в 1 месте, где описан рекорд и его сериализация. Ваш ParamsUtils тоже можно использовать для сериалзициии, но для этого, как я понимаю, кода будет не меньше чем c JSON, но с JSON стандартней и быстрее. И можно передавать сколь угодно сложные структуры. Мой подход частично взят с идей Remoting SDK (старой версии, без RTTI) https://www.remotingsdk.com/ro/default.aspx. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:11 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 DmSer пропущено... Согласен. Я неверно описал цели ParamsUtils. Основная фишка не в том, что с его помощью можно вернуть несколько параметров, а в том, что можно вернуть произвольное количество параметров (либо передать в функцию произвольное количество параметров). А в этом случае к параметром удобнее всего обращаться по именам. Удобно использовать при организации взаимодействия между модулями (например при передаче данных из EXE в DLL), когда заранее все возможные параметры не предусмотришь. Это в 100 раз удобнее, чем использовать голый Variant. При использовании record можно добиться такой же цели, но нужно передавать через указатель и в самом начале предусмотреть номер версии либо размер. Конечно, передавать record между EXE в DLL не годится. Мне часто приходится передавать данные и между двумя exe. Мое решение на это случай - одинаковый record ( или объекты) на стороне EXE в DLL, при передаче он сериализуется в строку, например через JSON. Обращение внутри каждого модуля к типизированным полям рекорда. Добавление параметра делается в 1 месте, где описан рекорд и его сериализация. Ваш ParamsUtils тоже можно использовать для сериалзициии, но для этого, как я понимаю, кода будет не меньше чем c JSON, но с JSON стандартней и быстрее. И можно передавать сколь угодно сложные структуры. Мой подход частично взят с идей Remoting SDK (старой версии, без RTTI) https://www.remotingsdk.com/ro/default.aspx. Расскажи подробнее, как гоняешь данные м-ду приложениями ч-з json? Через что передаешь и как информируешь приложение о поступлении данных? Гоняешь м-ду двумя приложениями или всегда есть промежуточный приложение-сервер? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:28 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 Еще лучше было бы, если бы ее можно было убрать в секцию объявления переменных, а не кода. Да, локальные переменные почему-то нельзя так инитить, а было бы хорошо. С другой стороны, константные иниты локальных переменных - дело редкое, а переменные в ините язык вряд ли когда-то будет поддерживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:39 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox, Между DLL и приложением обмениваюсь через небольшой надор экспортированных фуккий. Даныне передаются в виде пакетов конада (это имя метода) + параметры. Это все упаковывается по спецификации JSON RPC. https://ru.wikipedia.org/wiki/JSON-RPC Между приложениями, в т.ч. по сети, такие же пакеты JSON + бинарные блоки ходят через транспорт ZeroMQ https://zeromq.org Архитектура используется разнае, и клиент - сервер, и точка - точка ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:47 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
antox record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив Код: pascal 1. 2. 3. 4. 5.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:49 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
swame2 Да, это называется локальная переменная. В вызывающей фунции. Не хотелось-бы поучать, все таки 35 лет стажа, но локальная переменная это то, что объявлено внутри блока. Что пришло из вне - в данном контексте не является локальной переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:54 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
wadman, Я и имел в виду под локальной эту r объявленную внутри блока. Код: pascal 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:59 |
|
Как не передавать ничего в параметр по ссылке?
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal antox record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив Код: pascal 1. 2. 3. 4. 5.
? Не надо тут ничего обобщать через дженерики. Сделай простые типизированные рекорды. Я за дженерики и очень даже использую. Но тут они не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 14:07 |
|
|
start [/forum/topic.php?fid=58&msg=40091734&tid=2037098]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 137ms |
0 / 0 |