powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / передача в процедуре в качестве параметра var TObject
25 сообщений из 33, страница 1 из 2
передача в процедуре в качестве параметра var TObject
    #39731844
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то читал, что ссылочным типам не нужно ставить var

Есть у меня процедура

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure SetObjectData(var AObject: TObject; var AIndex: integer);
begin
 
    if AObject is TFDQuery then begin
      with (Aobject as TFDQuery) do begin
        Params[0].Values[AIndex]:= DT_START;
      end;
    end;

         
      TObjectQueue.Enqueu(AObject);
      AObject:= TObjext.Create;
      AIndex:= 0;
end;



И правильно ли я понимаю, что при создании нового объекта внутри этой процедуры я получаю новую ссылку и тогда мне нужно использовать var
А может переписать этот говнокод? А то ссылка на ссылку не очень. Но напишите, не просто переписать!! а как вы думаете лучше переписать?
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731855
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pointer - PInteger - PString = Не нужен var

Правильное присвоение по указателю
Код: pascal
1.
PVar^ := ValueCurrType;



TObject - Integer - String =var Нужен (Исключительно когда надо вернуть из процедуры по параметру)

Так как это прямые значения.
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731864
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Где-то читал, что ссылочным типам не нужно ставить var
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SetObjectData( pFDQuery: Pointer; var AIndex: integer);
var
   _FDQuery: TFDQuery;
begin
   _FDQuery:=pFDQuery;
   _FDQuery^.Params[0].Values[AIndex]:= DT_START;
  ...
end

где-то в далёкой-далекой галлактике...
 SetObjectData(@myFDQuery,  myIndex);



...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731867
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenkocptngrb,

Где-то читал, что ссылочным типам не нужно ставить var
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SetObjectData( pFDQuery: Pointer; var AIndex: integer);
var
   _FDQuery: TFDQuery;
begin
   _FDQuery:=pFDQuery;
   _FDQuery^.Params[0].Values[AIndex]:= DT_START;
  ...
end

где-то в далёкой-далекой галлактике...
 SetObjectData(@myFDQuery,  myIndex);




Промахнулся малость
var
_FDQuery: ^TFDQuery;
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731873
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko,

Зачем делать внутри функции ещё одну переменную ? Если в объявление аргументов можно было бы задать данный тип
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731880
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko, при таком и мой код будет работать, а если добавить строчку

Код: pascal
1.
new(_FDQuery);



То что получиться?
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731882
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоGerasimenko,

Зачем делать внутри функции ещё одну переменную ? Если в объявление аргументов можно было бы задать данный тип
Потому что Pointer при передаче параметров должен оставаться Pointer - ом. Особенно в сложных конструкциях...
Сугубо личное...
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731887
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko,

Полный бред. Сейчас я тебе это докажу

- Он в любом случае будет Pointer

Просто компилятор будет знать, что с этим типом делать дальше.
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731888
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Может ты пойдёшь сначала писать программки уровня А + Б ? Так как явное непонимание
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731890
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоGerasimenko,

Полный бред. Сейчас я тебе это докажу

- Он в любом случае будет Pointer

Просто компилятор будет знать, что с этим типом делать дальше.

Case myTypeObject of ...
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731895
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko,

К чему такие костыли ?

Код, объявленной переменной, в скомпилированном виде, будет иметь тип Uint32 или 64 в 64bit-ном компиляторе

Что предполагает, что бессмысленно объявлять вторую переменную
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731902
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоGerasimenko,

К чему такие костыли ?

Код, объявленной переменной, в скомпилированном виде, будет иметь тип Uint32 или 64 в 64bit-ном компиляторе

Что предполагает, что бессмысленно объявлять вторую переменную
Я ничего не предлагаю. Я показал один из вариантов. В сложных конструкциях очень удобный. В простых, используемый для однообразия (удобства читаемости) кода. Вы поступайте, как Вам угодно
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731913
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko,

Ну ладно, ладно. Я не ожидал такого подхода, как всовывание более 1 хрена в одну щель
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731917
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоGerasimenko,

Ну ладно, ладно. Я не ожидал такого подхода, как всовывание более 1 хрена в одну щель
Ты даже не понял, о чем я... Ну да ладно...
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731937
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbИ правильно ли я понимаю, что при создании нового объекта внутри этой процедуры я получаю новую ссылку и тогда мне нужно использовать var
Да, если тебе нужно, чтобы в вызываемом коде ссылке, преданная как параметр в эту процедуру, тоже стала указывать на созданный в пооцедуре объект.
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39731942
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbИ правильно ли я понимаю, что при создании нового объекта внутри этой процедуры я получаю новую ссылку и тогда мне нужно использовать var Правильно
cptngrbА может переписать этот говнокод? А то ссылка на ссылку не очень. Но напишите, не просто переписать!! а как вы думаете лучше переписать? Либо эта процедура вовсе не нужна, либо ей не хватает нескольких вещей:
1. нормальное название, а то нихрена не понятно нафига она
2. Типизированные входящие и выхлопные аргументы (нафига один аргумент использовать для данных разных типов?)
3. Описать, что ты хочешь этой процедурой достичь. Хотя бы для себя.
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732001
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoТы даже не понял, о чем я... Ну да ладно...

Я понял что ты в одну дырку любишь пихать всё подрят, и думать только потом, о последствиях
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732015
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka,
1. я в этой процедуре присваиваю данные моему объекту
2. используется разные параметры, т.к. использую разные объекты для Windows и Linux
3. хотя бы для себя я уже все описал))
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732016
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,
я так и пишу A+ Б
захотел добавить умножение, а Вы какашкой кидаетесь
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732018
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Если ты создаёшь объект, то возвращай его через Result обычный function
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732020
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как я понял, вариант с параметром pointer остался как самый красивый и только для тех, кто умеет уже писать программы сложнее А+Б.
Спасибо
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732368
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbDimonka,
1. я в этой процедуре присваиваю данные моему объектуЗвучит примерно как: чтобы написать программу, я стучу пальцами по клавиатуре.

cptngrb2. используется разные параметры, т.к. использую разные объекты для Windows и LinuxИспользуй разные процедуры, если не можешь типизировать в одной. Либо делай фасады для платформенных обьектов с единым интерфейсом.

Все твои потуги с Pointer - лишь усугубят всю неправильность ситуации.
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732580
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka, если вы не стучите по клавиатуре, когда пишите программу, то мое вам почтение.
По поводу разных разных процедур. Я хочу разные процедуры объединить в одну и для этого решил использовать TObject в качестве параметра вместо TOracleQuery и TFDQuery. Работает это, в моем случае, если параметр передавать как var AObject: TObject , то на первый взгляд работает как надо. У форумчан хотелось узнать, что можно ли так делать? (это раз) нужно ли так делать? (это два).
Какие грабли впереди...

Dimonkaделай фасады для платформенных обьектов с единым интерфейсом
примерно такое и хотелось услышать желательно с примером
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39732967
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbDimonkaделай фасады для платформенных обьектов с единым интерфейсом
примерно такое и хотелось услышать желательно с примером

Ну так сделай интерфейс для управления своими запросами:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TMyQueryFacade = class
protected
  // Здесь ты в наследнике напишешь для каждого платформенного типа TQuery свой код для изменения параметров запроса
  function GetQueryParameters(AIndex: integer): variant; virtual;
  procedure SetQueryParameters(AIndex: integer; AValue: variant); virtual;
public
  property Query: TQuery read FQuery; // Здесь он будет возвращать  TQuery зависящий от платформы
  property QueryParameters[AIndex: integer]: variant read GetQueryParameters write SetQueryParameters; 
  // если классы TOracleQuery и TFDQuery сильно отличаются можно добавить любые свойства в фасад для единообразного управления запросами
  property SQL: string read GetSQL write SetSQL; 
end;
...
Рейтинг: 0 / 0
передача в процедуре в качестве параметра var TObject
    #39733107
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimonka, так и сделаю, когда надоест процедуры шлепать
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / передача в процедуре в качестве параметра var TObject
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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