Re[5]: Химик, что там сейчас в Дельфе?
От: Khimik  
Дата: 24.01.19 18:31
Оценка:
Здравствуйте, Nuzhny, Вы писали:

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


K>>Я тут не понимаю. Почему код на C++ более компактен и лучше читаем?


N>Потому что вся логика реализуется в более понятных абстракциях. Перегрузка арифметических операций позволяет писать единообразный код для перемножения и сложения матриц, векторов, скаляров. Не надо помнить, какие там функции для этого (типа MatMulToVect(M, V)), а писать просто: M * V.

N>Самое крутое, что можно в таком стиле писать большие выражения, а они уже будут вычисляться не по частям, а как единое целое. Так умеет Eigen, OpenCV и множество других библиотек.

Ну вот в Delphi XE8 есть рекорды с процедурами и функциями. По-моему, их можно назвать статическими классами.
Скажем, есть у меня рекорд — вектор (три координаты):

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

Так что в коде можно писать, например:

CurRadius:=myvector1.VectRad;

На самом деле, я только начал понемногу переписывать старый дерьмокод, который писал без этих возможностей. Для суммы векторов у меня пока есть функция:

function SumVects(vect1,vect2:tvect):tvect;
begin
result.x:=vect1.x+vect2.x;
result.y:=vect1.y+vect2.y;
result.z:=vect1.z+vect2.z;
end;

Когда дойдут руки, заменю её на это:

TVect=record
...
class operator Add(self, othervect:tvect):tvect;
end;

И можно будет в коде писать так:

MyVector3:=MyVector1+MyVector2;

Хотя уже на этом примере видно, что такой подход далеко не всегда применим: скажем, умножать два вектора можно по-разному (скалярное или векторное умножение).
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.