Первый класс, который мы поправим - String2. Он самый короткий, и не использует других наших классов. И для примера я поподробнее остановлюсь на самом процессе.
Подсвечиваются всего три ошибки: в методе shrinkSequencesOf не задана типизация локальных переменных. Зададим ее:
Код AS3:
var len:int = s.length;
var idx:int = 0;
var idx2:int = 0;
var rs:String = "";
Затем все объявления var заменим на const (пользуйтесь возможностью автоматического поиска и замены). Затем все переменные, которые подсветили ошибку присвоения, обратно заменим на var.
Займемся именованием. Для начала заменим имена аргументов функции. Думать тут особо не надо, поскольку автор позаботилась о комментариях: s заменяем на originalString, ch заменяем на characterToBeFound.
Затем, поскольку сокращений мы не любим, заменим:
len на length
idx на startIndex
idx2 на endIndex
rs на resultString
Также добавим фигурные скобки вложенному while.
Давайте сравним, что было и что стало:
Код AS3:
// БЫЛО
public static function shrinkSequencesOf(s:String, ch:String):String {
var len = s.length;
var idx = 0;
var idx2 = 0;
var rs = "";
while ((idx2 = s.indexOf(ch, idx) + 1) != 0) {
// include string up to first character in sequence
rs += s.substring(idx, idx2);
idx = idx2;
// remove all subsequent characters in sequence
while ((s.charAt(idx) == ch) && (idx < len)) idx++;
}
return rs + s.substring(idx, len);
}
// СТАЛО
public static function shrinkSequencesOf(originalString:String, characterToBeFound:String):String {
const length:uint = originalString.length;
var startIndex:int = 0;
var endIndex:int = 0;
var resultString:String = "";
while ((endIndex = originalString.indexOf(characterToBeFound, startIndex) + 1) != 0) {
// include string up to first character in sequence
resultString += originalString.substring(startIndex, endIndex);
startIndex = endIndex;
// remove all subsequent characters in sequence
while ((originalString.charAt(startIndex) == characterToBeFound) && (startIndex < length)) {
startIndex++;
}
}
return resultString + originalString.substring(startIndex, length);
}
Да, новый метод не так лаконичен. Он более объемен, но и более читабелен.
Обратите внимание на еще один положительный фактор: в процессе мы всё еще не изменяли логику программы, но уже начали более детально знакомиться с проектом.
К тому моменту, когда мы закончим рефакторинг мы будем довольно неплохо представлять что в проекте имеется, где находится и как примерно работает.