Следующий класс для причесывания - PathToArray. Он хоть и дает большое количество ошибок, однако подавляющее большинство - по одинаковой причине, и их можно исправить без существенных усилий.
В методе extractCmds динамически создается объект, содержащий перечень значений стандартных цветов. Эти цвета неизменны, а объект может быть использован неоднократно. Это прекрасный повод сделать объект статической константой и инициализировать его в теле класса. Так и поступим.
Вырезаем из метода всю инициализацию объекта colors, до строчки yellowgreen : 0x9acd32 включительно и вставляем с тело класса непосредственно после объявления класса.
Затем изменяем объявления и переносим закрывающую скобку в конец присвоений значений цветам. Должно получиться так:
Код AS3:
private static const colors:Object = {
colors.blue=0x0000ff;
........
colors.yellowgreen=0x9acd32;
}
Разумеется, это неверно, и мы поиском и заменой (но не используя replace all) вначале удаляем строку "colors.", затем заменяем "=" на ":" и, в конце ";" на ",".
В итоге должно получиться так:
Код AS3:
private static const colors:Object = {
blue:0x0000ff,
........
yellowgreen:0x9acd32
}
Теперь, нас этот объект не очень интересует и, если нажать волшебное сочетание клавиш SHIFT+CTRL+F, то всё перечисление из столбца превратится в одну строку и не будет занимать три экрана.
Изучив текущее состояние увидим, что очень много ошибок дает нетипизированный доступ к атрибутам. Что-ж, создадим специальный метод доступа и заменим на него обращения к атрибутам.
Код AS3:
private function getAttribute(node:XMLNode, attributeName:String) : String {
return node.attributes[attributeName];
}
Процесс может оказаться утомительным и подверженым ошибкам. Чтобы этого избежать изучаем обращения к объекту attributes и видим, что строка кода всегда выглядит как "node.attributes.". Это дает нам возможность применить автозамену:
заменяем "node.attributes." (с точкой на конце!) на "getAttribute(node, ", в результате чего редактор расцветет массой ошибок. Это очень хорошо. Кликая на красные точки справа от скроллера мы переходим от ошибки к ошибке и ставим закрывающую скобку сразу после первого слова, следующего за "node". Заодно берем это слово в кавычки, поскольку это имя атрибута.
В процессе мы обнаруживаем еще одну прелесть рефакторинга: мы обнаружили ошибку несоответствия типов в строке:
Код AS3:
hasRotate = getAttribute(node, "transform").indexOf("rotate");
Обратите внимание, что за внешне безобидным отсутствием типа пряталась куда более серьезная ошибка - несоответствие типа. Игнорирование малой ошибки может повлечь за собой большую.
При обнаружении ошибки нужно четко понимать, что процесс рефакторинга останавливается и начинается другой процесс - исправление ошибки логики.
Обнаружение ошибки - серьезное происшествие и очень хорошее: будучи скрытой мы могли голову сломать откуда она берется и найти только с большим трудом.
В данном случае это локальная ошибка, не влекущая за собой цепочку других. Но всё-таки рассмотрим ее отдельно.