Size: a a a

2020 February 14

DB

Dmitry Belkevich in Delphi & Lazarus
Нил проверку не пройдёт
источник

D

Darlok(Artem) in Delphi & Lazarus
Dmitry Belkevich
Нил проверку не пройдёт
Я знаю, но в первом варианте нет проверки, а значит потенциально там краш
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Ну первый вариант не лучший, да. Надёжнее проверять
источник

D

Darlok(Artem) in Delphi & Lazarus
Dmitry Belkevich
Ну первый вариант не лучший, да. Надёжнее проверять
Надёжнее явно запрашивать конкретные данные посредством передачи их в аргументах метода, а не совать в метод целый объект ради 1-2х свойств
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Ну и тут согласен. Но может там обработчик события
источник

DV

Denis Vasilyev in Delphi & Lazarus
Darlok(Artem)
Надёжнее явно запрашивать конкретные данные посредством передачи их в аргументах метода, а не совать в метод целый объект ради 1-2х свойств
Мой код выше был написал в таком методе
procedure Tfm.ShapeAllMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
источник

GB

George Bakhtadze in Delphi & Lazarus
c with будет еще короче ;)
источник

D

Darlok(Artem) in Delphi & Lazarus
function CalcLeftTop(const ALeft, ATop, AX, AY, AFX, AFY: Double; out AOutLeft: Double; out AOutTop: Double): Boolean;
 begin
   Result := False;
   AOutLeft := ALeft + AX - AFX;
   AOutTop := ATop + AY - AFY;
   Result := True;
 end;

 procedure Tfm.ShapeAllMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 begin
   if TryCalcLeftTop(ShapeAll.Left, ShapeAll.Top, vX, vY, vFX, vFY, vOutLeft, vOutTop) then
   begin
     ShapeAll.Left := vOutLeft;
     ShapeAll.Top := vOutTop;
   end
   else
     raise E;
 end;
грубо говоря этот код закроет дыру с Sender'ом, возможно кривым кастингом и неявной работой.
источник

D

Darlok(Artem) in Delphi & Lazarus
Может немного избыточно, зато более ясно что и куда движется и как работает
источник

D

Darlok(Artem) in Delphi & Lazarus
vX, vY, vFX, vFY это те самые волшебные переменные которые были в изначальном примере
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Kiss принцип плачет )
источник

GB

George Bakhtadze in Delphi & Lazarus
Darlok(Artem)
function CalcLeftTop(const ALeft, ATop, AX, AY, AFX, AFY: Double; out AOutLeft: Double; out AOutTop: Double): Boolean;
 begin
   Result := False;
   AOutLeft := ALeft + AX - AFX;
   AOutTop := ATop + AY - AFY;
   Result := True;
 end;

 procedure Tfm.ShapeAllMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 begin
   if TryCalcLeftTop(ShapeAll.Left, ShapeAll.Top, vX, vY, vFX, vFY, vOutLeft, vOutTop) then
   begin
     ShapeAll.Left := vOutLeft;
     ShapeAll.Top := vOutTop;
   end
   else
     raise E;
 end;
грубо говоря этот код закроет дыру с Sender'ом, возможно кривым кастингом и неявной работой.
зачем result сетить 2 раза?
источник

D

Darlok(Artem) in Delphi & Lazarus
Dmitry Belkevich
Kiss принцип плачет )
Ага, а потом вылетают баги в самых неведомых местах, а объяснить и отловить не могут :)
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Ага. Вот из-за такого кода как раз 😂
источник

D

Darlok(Artem) in Delphi & Lazarus
George Bakhtadze
зачем result сетить 2 раза?
Это привычка. На самом деле у меня в такое оборачивается более сложная логика которая может необоснованно упасть (в данном случае на `AOutLeft := ALeft + AX - AFX;
   AOutTop := ATop + AY - AFY;` ). Я там заглушку на try rxcept забыл добавить
источник

DB

Dmitry Belkevich in Delphi & Lazarus
🙈
источник

GB

George Bakhtadze in Delphi & Lazarus
Darlok(Artem)
Это привычка. На самом деле у меня в такое оборачивается более сложная логика которая может необоснованно упасть (в данном случае на `AOutLeft := ALeft + AX - AFX;
   AOutTop := ATop + AY - AFY;` ). Я там заглушку на try rxcept забыл добавить
приличные IDE ругаются на такую привычку
источник

D

Darlok(Artem) in Delphi & Lazarus
Я проходил эти волшебные костыли посредством Sender'a и потом тушил 5-ю точку когда интерфейсы менялись или вообще убирали
источник

SB

Sergey Bodrov in Delphi & Lazarus
Как в анекдоте про программиста и два стакана.
источник

D

Darlok(Artem) in Delphi & Lazarus
George Bakhtadze
приличные IDE ругаются на такую привычку
function CalcLeftTop(const ALeft, ATop, AX, AY, AFX, AFY: Double; out AOutLeft: Double; out AOutTop: Double): Boolean;
 begin
   Result := False;
   try
   AOutLeft := ALeft + AX - AFX;
   AOutTop := ATop + AY - AFY;
     HttpRequest();
     raise Exception.Create('Error Message');
   Result := True;
   except

   end;
 end;
Вот подправил. Смысл в том что в HttpRequest может произойти вылет какого-то волшебного компонента для работы с Http
источник