Исходный код
void SimplexIteration::ReWidth()
{ w[-2]=w[0]=Width; w[-1]=5; for(size_t j=1;j<A.size_j();j++) w[j]=Width;
if (var) for(size_t j=1; j<A.size_j(); j++)
if (strlen(var[j])>w[j]) w[j]=strlen(var[j]);
}
Что не так в исходном коде
- Отличный пример ужасного форматирования кода.
- Странные индексы массива
-1
и -2
. - Короткие названия переменных
w
, A
, var
, которые ничего не сообщают об их предназначении. - Магический литерал
5
, смысл которого неизвестен. - Сомнительная необходимость в двух одинаковых циклах.
- Смешаны две разных ответственности (два разных знания): вычисление ширины элемента и присвоение новой ширины всем элементам. Разные ответственности всегда необходимо разделять.
Как отрефакторить исходный код
void SimplexIteration::ReWidth()
{
ItemWidths[-2] = w[0] = DefaultWidth;
ItemWidths[-1] = 5;
for (size_t j = 1; j < Items.size_j(); j++) {
w[j] = GetItemWidth(j);
}
}
int SimplexIteration:GetItemWidth(int i)
{
return ItemContent ? max(DefaultWidth, strlen(ItemContent[i])) : DefaultWidth;
}
Теория