Показать сообщение отдельно
Старый 21.03.2008, 14:53
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 53  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
По умолчанию Рефакторим extractCommands

Вернемся к методу extractCommands.
Он всё еще великоват по размеру и его логика теряется во множестве условных операторов. К тому же метод содержит логически обособленные блоки, которые проще воспринимать отдельными методами.
Для начала попробуем вынести блок if (hasFill).
В строке, следующей за if (hasFill) добавим:
Код AS3:
fill = getFill();
C помощью CTRL+1 создадим метод и скопируем в него содержимое блока if до else. Закомментируем скопированный участок кода и из буфера обмена вставляем код в созданный метод.
Далее по очереди проходим по подсвеченым ошибкам и решаем что делать.
startColor - объявим локально.
node - объявим аргументом функции и передадим node в вызове.
thisColor - объявим локально.
Далее заменим присвоение переменной fill значения на return. Заодно удалим участки else, поскольку они оказываются ненужными. В итоге получаем такой метод:
Код AS3:
private function getFill(node:XMLNode) : Fill {
	// parse for fill color specification
	// if a hex number is specified, startColor will be > 0
	// if a color name is specified, startColor will be 0
	var startColor:Number = getAttribute(node, "fill").indexOf("#") + 1;
	if (startColor == 0) {   
		// name specified instead of color number
		var thisColor:Number = colors[getAttribute(node, "fill")];
		// if (thisColor == undefined) {
		if (isNaN(thisColor)) {
			return new Fill(0, 0);  // set invisible if undefined
		}
		return new Fill(thisColor, 100);
	}
	return new Fill(parseInt(getAttribute(node, "fill").substr(startColor, 6), 16), 100);
}
Тестируем. Работает.

Сносим закомментированный код и этот участок кода превращается во вполне удобоваримый:
Код AS3:
if (hasFill) {
	fill = getFill(node);
} else {
	fill = new Fill(0xffffff, 100);
}
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:35.