Исходный код
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; 
}
Теория