powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как не передавать ничего в параметр по ссылке?
14 сообщений из 39, страница 2 из 2
Как не передавать ничего в параметр по ссылке?
    #40091734
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp
DmSer

Если затраты изменяются в объёме работы программиста
ParamsUtils.pas .

Хм, объявлять параметры по именам руками, без Code Completion, без контроля ошибок... Экономия времени программиста налицо.


Неистово плюсую
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091738
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091743
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2
Не понимаю чем плохо заполнить значения рекордов в паре строчек перед вызовом функции.
Все понятно и читаемо. А так все в одной строке - макаронине, при рефакторинге и сравнении версий изменений боль при
разборе какой параметр на каком месте и не перепутали ли порядок.

Не плохо, просто сахар и сокращение визуального шума. Вообще львиная доля фич любого современного языка - это сахар, без которого можно обойтись.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var rec: TSomeRec;
begin
  rec := Default(TSomeRec);
  rec.foo := 'lala';
  rec.bar := 123;
  rec.quz := false;
  func(rec);


Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  var rec: TSomeRec := (
    foo: 'lala',
    bar: 123,
    quz: false
  );
  func(rec);
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091761
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal,

Да, вторая конструкция выглядит лучше, и согласен, если она предшествует вызову, а не находится внутри него, тогда она не противоречит тому о чем написал.
Еще лучше было бы, если бы ее можно было убрать в секцию объявления переменных, а не кода.
Я для такой инициализации обычно использую псевдоконструктор записи. Но там проблемка если параметров больше 2-4 - как я писал - с количеством параметров уже в конструкторе
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091771
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив


В чем проблема объявить record? при необходимости можно использовать и вложенные.

Не нужны для этого случая кортежи, поверь. потом будут лишние сложности в поддержке кода.
Нужен максимально строгий контроль компилятором типа параметров.
Вот тут предложили типа кортежа в ParamUtils. Я сам баловался таким псевдообобщением лет 20 назад, потом все это оказалось пшиком.
Но там это было более оправдано, потому что объекты протаскивались через COM объкектную модель, а там добавить параметр в устоявшийся код на 2 порядка сложней, чем добавить параметр в рекорд.
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091801
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
DmSer
На каждый случай объявлять новый record - то ещё удовольствие!

Вообще не вижу проблемы. Весь WinAPI на этом построен.


Согласен. Я неверно описал цели ParamsUtils. Основная фишка не в том, что с его помощью можно вернуть несколько параметров, а в том, что можно вернуть произвольное количество параметров (либо передать в функцию произвольное количество параметров). А в этом случае к параметром удобнее всего обращаться по именам. Удобно использовать при организации взаимодействия между модулями (например при передаче данных из EXE в DLL), когда заранее все возможные параметры не предусмотришь. Это в 100 раз удобнее, чем использовать голый Variant.
При использовании record можно добиться такой же цели, но нужно передавать через указатель и в самом начале предусмотреть номер версии либо размер.
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091813
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091817
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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? Через что передаешь и как информируешь приложение о поступлении данных? Гоняешь м-ду двумя приложениями или всегда есть промежуточный приложение-сервер?
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091820
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2
Еще лучше было бы, если бы ее можно было убрать в секцию объявления переменных, а не кода.

Да, локальные переменные почему-то нельзя так инитить, а было бы хорошо. С другой стороны, константные иниты локальных переменных - дело редкое, а переменные в ините язык вряд ли когда-то будет поддерживать.
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091823
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox,

Между DLL и приложением обмениваюсь через небольшой надор экспортированных фуккий.
Даныне передаются в виде пакетов конада (это имя метода) + параметры.
Это все упаковывается по спецификации JSON RPC.
https://ru.wikipedia.org/wiki/JSON-RPC

Между приложениями, в т.ч. по сети, такие же пакеты JSON + бинарные блоки ходят через транспорт ZeroMQ
https://zeromq.org
Архитектура используется разнае, и клиент - сервер, и точка - точка
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091824
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив

Код: pascal
1.
2.
3.
4.
5.
type
  TTuple<T1,T2> = record
    F1: T1;
    F2: T2;
  end;


?
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091828
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2

Да, это называется локальная переменная. В вызывающей фунции.

Не хотелось-бы поучать, все таки 35 лет стажа, но локальная переменная это то, что объявлено внутри блока. Что пришло из вне - в данном контексте не является локальной переменной.
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091833
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Я и имел в виду под локальной эту r объявленную внутри блока.

Код: pascal
1.
2.
3.
4.
var
  r: string;
begin
  myf('Строка', r);
...
Рейтинг: 0 / 0
Как не передавать ничего в параметр по ссылке?
    #40091840
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fr0sT-Brutal
antox
record надо же объявить... Делаю так, если надо много значений вывести. Но частенько надо true/false + значение в примитивном типе. Хотелось бы вернуть что-то типа смешанного кортежа или пусть даже простой (лучше ассоциативный) массив

Код: pascal
1.
2.
3.
4.
5.
type
  TTuple<T1,T2> = record
    F1: T1;
    F2: T2;
  end;


?


Не надо тут ничего обобщать через дженерики. Сделай простые типизированные рекорды.
Я за дженерики и очень даже использую. Но тут они не нужны.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как не передавать ничего в параметр по ссылке?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]