Информация об изменениях

Сообщение Re[7]: Химик, что там сейчас в Дельфе? от 27.01.2019 19:52

Изменено 27.01.2019 19:53 swame

Re[7]: Химик, что там сейчас в Дельфе?
Здравствуйте, Lazy Bear, Вы писали:

LB>Здравствуйте, Khimik, Вы писали:


K>>type

K>>TVect=record
K>>x,y,z:double;
K>>function VectRad:double;//Длина вектора
K>>function VectRad2:double;//Квадрат длины
K>>function IsNil:boolean;//Равен ли нулю
K>>function MinVect:tvect;//Поменять все знаки
K>>end;

LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.

LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор

LB>Почему бы не сделать так, например:


LB>
LB>TVector = record
LB>  x, y, z: Double;
LB>  function GetLength: Double;
LB>  function GetSquareLength: Double;
LB>  function IsZeroLength: Boolean;
LB>  function InvertAllSigns: TVector;
LB>end;
LB>


LB>И выглядит каноничненько и комментарии тут сто лет не нужны


LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


То они хотят перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.
Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
  THPointF = record helper for TFloatPoint
  private
    function GetLen: Double;
    procedure SetLen(const Value: Double);
    function GetStr: string;
    procedure SetStr(const Value: string);
    function GetStrC: string;
  public
    constructor Create (const SX, SY: string); overload;
    function Px2Sx (K: single=1.0): TSxPoint; overload;
    function Sx2Px (K: single=1.0): TPxPoint; overload;
    function Px2Sp (K: single=1.0): TPoint; overload;
    function Sx2Pp (K: single=1.0): TPoint; overload;
    function Presise (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function IsHor (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsHor (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function Neg: TPointF;
    function DistFast(const P2 : TPointF) : Double;
    function Mul(K: single): TPointF;
    function RoundF: TPointF;
    function GP: TGPPointF;
    function AlignDif: TFloatPoint;
    function IsAligned: boolean;
    function Scalar(const P2 : TPointF): Double;
    function PseudoScalar(const P2 : TPointF): Double;
    function ColLinear(const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function RotateD (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateD (Angle: single): TFloatPoint; overload;
    function RotateR (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateOrient(Orient: integer): TFloatPoint; overload;
    function RotateOrient(Orient: integer; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateR (Angle: single): TFloatPoint; overload;
    procedure Mirror;
    function MirrorTo (bMirror: boolean=true): TFloatPoint;
    function OffsetTo(const DX, DY: Single): TFloatPoint; overload;
    function OffsetTo(const Point: TPointF): TFloatPoint; overload;
    function OffsetTo(const Size: TSize): TFloatPoint; overload;
    function AngleD (const Center: TPointF): single;
    function AngleR (const Center: TPointF): single;
    function SetLenRes(const Value: Double): boolean;
    function Interpolation(const P2 : TPointF; K: single): TPointF;
    {точка на расстоянии ALength от начала}
    function VectorByLength (const P2 : TPointF; ALength: single): TPointF;
    function Middle(const P2: TFloatPoint): TFloatPoint;
    function Arctan2D (K: single = 1): single;
    function Arctan2R (K: single = 1): single;
    procedure StrXY (out SX, SY: string);
    property Len: Double read GetLen write SetLen;
    property Str: string read GetStr write SetStr;
    property StrС: string read GetStrC write SetStr;
  end;
Re[7]: Химик, что там сейчас в Дельфе?
Здравствуйте, Lazy Bear, Вы писали:

LB>Здравствуйте, Khimik, Вы писали:



LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.

LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор

LB>Почему бы не сделать так, например:


LB>
LB>TVector = record
LB>  x, y, z: Double;
LB>  function GetLength: Double;
LB>  function GetSquareLength: Double;
LB>  function IsZeroLength: Boolean;
LB>  function InvertAllSigns: TVector;
LB>end;
LB>


LB>И выглядит каноничненько и комментарии тут сто лет не нужны


LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.
Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
  THPointF = record helper for TFloatPoint
  private
    function GetLen: Double;
    procedure SetLen(const Value: Double);
    function GetStr: string;
    procedure SetStr(const Value: string);
    function GetStrC: string;
  public
    constructor Create (const SX, SY: string); overload;
    function Px2Sx (K: single=1.0): TSxPoint; overload;
    function Sx2Px (K: single=1.0): TPxPoint; overload;
    function Px2Sp (K: single=1.0): TPoint; overload;
    function Sx2Pp (K: single=1.0): TPoint; overload;
    function Presise (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function IsHor (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsHor (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function Neg: TPointF;
    function DistFast(const P2 : TPointF) : Double;
    function Mul(K: single): TPointF;
    function RoundF: TPointF;
    function GP: TGPPointF;
    function AlignDif: TFloatPoint;
    function IsAligned: boolean;
    function Scalar(const P2 : TPointF): Double;
    function PseudoScalar(const P2 : TPointF): Double;
    function ColLinear(const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function RotateD (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateD (Angle: single): TFloatPoint; overload;
    function RotateR (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateOrient(Orient: integer): TFloatPoint; overload;
    function RotateOrient(Orient: integer; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateR (Angle: single): TFloatPoint; overload;
    procedure Mirror;
    function MirrorTo (bMirror: boolean=true): TFloatPoint;
    function OffsetTo(const DX, DY: Single): TFloatPoint; overload;
    function OffsetTo(const Point: TPointF): TFloatPoint; overload;
    function OffsetTo(const Size: TSize): TFloatPoint; overload;
    function AngleD (const Center: TPointF): single;
    function AngleR (const Center: TPointF): single;
    function SetLenRes(const Value: Double): boolean;
    function Interpolation(const P2 : TPointF; K: single): TPointF;
    {точка на расстоянии ALength от начала}
    function VectorByLength (const P2 : TPointF; ALength: single): TPointF;
    function Middle(const P2: TFloatPoint): TFloatPoint;
    function Arctan2D (K: single = 1): single;
    function Arctan2R (K: single = 1): single;
    procedure StrXY (out SX, SY: string);
    property Len: Double read GetLen write SetLen;
    property Str: string read GetStr write SetStr;
    property StrС: string read GetStrC write SetStr;
  end;