Прошел пару первых уроков из курса «составные данные»: Первый учит моделировать объекты типа «точка на плоскости».
Для работы с точками на плоскости объявляются функция-конструктор makePoint
и две функции-селектора getX
и getY
. Конструктор принимает два аргумента: x
и y
, которые соответствуют координатам точки и возвращает объект, который эту точку олицетворяет. Селекторы наоборот, принимают объект-точку и возвращают число, соответствующее координате x
или y
этой точки.
Вот так, например, создается точка, которая лежит в начале координат:
const point = makePoint(0, 0)
Если хотим посмотреть, какая у точки координата x, то используем соответствующий селектор:
const x = getX(point)
Теперь можно позадавать разные операции над точками. Вот, например, функция, которая получив любую точку возвращает новую точку, отраженную относительно оси X
:
const symmetricalXPoint = (point) => makePoint(getX(point), getY(point))
Может возникнуть вопрос, а зачем все эти конструкторы и селекторы? Нельзя использовать обычные числовые константы для работы с этими точками? Можно, если захотеть. Для примера, возьмем задачу найти середину между двумя точками: (1, 1)
и (3, 7)
. Решение просто на числах будет выглядеть примерно так:
// первая точка
const x1 = 1;
const y1 = 1;
// вторая точка
const x2 = 3;
const y2 = 7;
// точка между первой и второй
const x3 = middle(x1, x2);
const y3 = middle(y1, y2);
То же самое, но используя тип данных для точки:
const p1 = makePoint(1, 1);
const p2 = makePoint(7, 3);
const p3 = middle(p1, p2);
В первом случае код захламлен горой констант с разными координатами, которые никак между собой не связаны. Приходится внимательно следить, какая координата к какой точке относится. Представим на минуту, что будет, если в программе точек не три, а сотни. И расположены они не на плоскости, а в четырехмерном пространстве.
В следующем посте о том, как реализовать функции makePoint
, getX
и getY
.