你想要在你的代碼的這一點做什麼是重構。
基本上,你需要把你的代碼塊,並將它們分解成更小的函數。理想情況下,功能不會超過5行代碼。因爲否則,你的職能就是打破單一職責規則,做得太多。
此時有兩種重構方法。更難的更長的路,或更容易更長的路。 更難的更長的方法是手動嘗試將代碼分解爲更小的函數。查看哪些元素是常見的,並重構這些元素。例如下面的代碼:
for(var k:int = 0; k <= ifl; k++)
{
Grid[ numbers[1] ][ (numbers[0] - k) ].alpha = 1;
Grid[ numbers[1] ][ (numbers[0] - k) ].circle.visible = true;
Grid[ numbers[1] ][ (numbers[0] - k) ].isOccupied = false;
trace(" ++++++!!!! grid was occupied" + numbers[1] + "_" + (numbers[0] - k)) ;
}
將成爲驗證碼:
private function clearOccupiedSpaces(ifl:Array):void
{
for(var i:int = 0; i <= ifl; i++)
{
Grid[ numbers[1] ][ (numbers[0] - i) ].alpha = 1;
Grid[ numbers[1] ][ (numbers[0] - i) ].circle.visible = true;
Grid[ numbers[1] ][ (numbers[0] - i) ].isOccupied = false;
trace(" ++++++!!!! grid was occupied" + numbers[1] + "_" + (numbers[0] - i)) ;
}
}
if(currentObj.itemsFromLeft > 0)
{
trace("zzzzzzz");
//when we start to drag it (we remove it from the cell) we restore all the properties to the LEFT cell
var ifl:Number = currentObj.itemsFromLeft; // total left elements
clearOccupiedSpaces(ifl);
}
一旦你打破了一切成更小的功能,你的代碼將看起來不那麼混亂,你將能夠更容易地找到模式,並管理代碼。您還需要較少的評論,因爲您的職能將清楚地標明他們在做什麼。
第二個也是更好的選擇是使用TDD或測試驅動設計重構代碼。這將允許你通過編寫測試來解決你的算法。你自然會得到更小的函數,並且能夠知道某些更改是否意外地破壞了用例。例如,您現在有左側檢查工作。但是如果當你寫下你的RIGHT檢查時,你在左邊打破了什麼?除非你使用單元測試,否則你不會真的知道,直到太遲。
單元測試的一個例子是這樣的:
public function testLeftCheck_nothingToTheLeft_placeObject():void {
var box222:Box222 = new Box222();
box222.itemsFromLeft = null;
placeObject(box222);
assertTrue(box222.width == SINGLE_BOX;);
}
public function testLeftCheck_somethingToTheLeft_combineObject():void {
var box222:Box222 = new Box222();
box222.itemsFromLeft = [new Box222()];
placeObject(box222);
assertTrue(box222.width == TWO_BOX_WIDTH;);
}
來源
2014-03-30 14:11:11
Bob
好你說的第一個方法情理之中的事情和沒有開始做,現在,但我從來沒有聽說過這個TDD方式。你能指出一些很好的例子/鏈接嗎? – GregorII
@GregorII這是假設你正在使用FlashBuilder:http://www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html 也有#2的許多問題媒體鏈接:) http://stackoverflow.com/questions/4909959/unit-testing-as3-code-for-flash – Bob
另外,這裏是關於TDD和單元測試的一個很好的問題/答案,來自gamedev。 http://gamedev.stackexchange.com/questions/14528/best-practices-for-unittesting-heavy-flash-game-clients-and-libraries – Bob