Я столкнулся с ситуацией, когда, пытаясь не изменять базовый источник (это не совсем «мой» код на этом уровне; в противном случае я хотел бы изменить его), у меня есть два почти идентичных пути кода, но с отдельными типами данных, которые я использую.
Не обращая внимания на то, что вы, вероятно, могли бы довольно легко преобразовать одно в другое, похожий пример будет объектом "Круг".
С одной стороны, у меня есть Point
объект и радиус.С другой стороны, у меня есть Circle
объект.Оба они могут описывать один и тот же фактический круг, но я просто не могу преобразовать один в другой.
Тогда в моем коде у меня есть:
void Run(Circle circle)
{
if(AllNegative(circle))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(circle);
// ...
}
}
void Run(Point pt, uint radius)
{
if(AllNegative(pt, radius))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(pt, radius);
// ...
}
}
bool AllNegative(Circle circle) { return (circle.AllNegative); }
bool AllNegative(Point pt, uint radius) { return ((pt.X + radius) < 0) && ((pt.Y + radius) < 0); }
void ColorCircle(Circle circle) { /* ... */ }
void ColorCircle(Point pt, uint radius) { /* ... */ }
Конечно, у меня естьбольше кода в Run
, чем в этом примере.
Как объединить Run
в одну функцию, чтобы минимизировать дублирование кода?