Сообщение Re[7]: Химик, что там сейчас в Дельфе? от 27.01.2019 19:52
Изменено 27.01.2019 20:07 swame
Re[7]: Химик, что там сейчас в Дельфе?
Здравствуйте, Lazy Bear, Вы писали:
LB>Здравствуйте, Khimik, Вы писали:
LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.
LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор
LB>Почему бы не сделать так, например:
LB>
LB>И выглядит каноничненько и комментарии тут сто лет не нужны
LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.
То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.
Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
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;
Re[7]: Химик, что там сейчас в Дельфе?
Здравствуйте, Lazy Bear, Вы писали:
LB>Здравствуйте, Khimik, Вы писали:
LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.
LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор
LB>Почему бы не сделать так, например:
LB>
LB>И выглядит каноничненько и комментарии тут сто лет не нужны
LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.
То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.
Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
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;
TFloatSegment = record
public
P1, P2: TFloatPoint;
constructor Create (const AP1, AP2: TFloatPoint);
function RectBounds (DInflate: single = 0): TFloatRect;
function Contains (const P: TFloatPoint; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
function ClosestPoint (const P: TFloatPoint): TFloatPoint;
{перпендикуляр}
function Perpendicular: TFloatSegment; overload;
function Perpendicular (const P: TFloatPoint; K: single=1): TFloatSegment; overload;
{точка основания перпендикуляра}
// function Perpendicular: TFloatSegment;
//вычисляем коэффициенты уравнения прямой y=a*x+b
function ToCanonical(out A, B: single): boolean;
function X2Y (X: single): single;
function Y2X (Y: single): single;
function PBottomSide (const P: TFloatPoint) : boolean;
function PTopSide (const P: TFloatPoint) : boolean;
function PLeftSide (const P: TFloatPoint) : boolean;
function PRightSide (const P: TFloatPoint) : boolean;
{пересечение с учетом длины отрезка}
function SimpleCross (const Segment2: TFloatSegment): TFloatPoint;
function CrossSegment (const Segment2: TFloatSegment; var CrossP: TFloatPoint;
var CrossContact: SCrossContact; Epsilon: Single=FLOATPOINT_ACCURACY): integer;
function CrossEllipse (const Ellipse: TRectF; var CrossP1, CrossP2: TFloatPoint): integer;
{пересечение бесконечной прямой}
function LineCrossEllipse (const Ellipse: TRectF; var CrossP1, CrossP2: TFloatPoint): integer;
function LineCrossLine (const AP1, AP2: TFloatPoint; var CrossP: TFloatPoint;
Epsilon: Single=FLOATPOINT_ACCURACY): integer; overload;
function LineCrossLine (const Segment2: TFloatSegment; var CrossP: TFloatPoint; Epsilon:
Single=FLOATPOINT_ACCURACY): integer; overload;
function Collinear (const Segment2: TFloatSegment; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
function DistanceP(const P: TFloatPoint; var NearestP: TFloatPoint): single; overload;
function DistanceP(const P: TFloatPoint): single; overload;
function VectorByLength (ALength: single): TPointF;
function AngleD: single;
function CrossArc (const Ellipse: TRectF; P1, P2: TFloatPoint; bArcClockWise: boolean;
var CrossP1, CrossP2: TFloatPoint): integer;
function IsHor (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean;
function IsVert (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean;
function IsOrtho (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean;
function Orient: integer;
function Len: single;
function RadiusVector: TFloatPoint;
function Scalar(const Segment2 : TFloatSegment): Double;
function SortX: TFloatSegment;
function SortY: TFloatSegment;
function Rect: TFloatRect;
function ShiftPerp(Dist: single): TFloatSegment;
function Middle: TFloatPoint;
end;