2016-04-03 24 views
0

İşlev biliyorum Zamanı tekrarlanan görevler olarak kaydetmek için kullanılır.Bir değer döndüren işlevin önemi nedir?

var myStar:Star; 

function makeStar(myX:Number, myY:Number):void { 
myStar = new Star(); 
myStar.x = myX; 
myStar.y = myY; 
addChild(myStar); 
} 

makeStar(50,50); 
makeStar(150,150); 

Ama soru, neden ben bir numara veya dize dönmek için bir işlevi kullanmak istiyorum ... o kullanımının neyi önemini: Biz böyle bir değeri belirtmek için işlevine argüman geçebilir?

cevap

1

Size bir Soru sormama izin verin: Örnek kodunuzda, oluşturmak için oluşturduğunuz ilk yıldızı nasıl yönetirsiniz, örneğin, 100 px sağa mı?

Yanıt, yapamazsınız (en azından kolay bir şekilde değil). İkinci aramanızla makeStar(..)'a myStar'u geçersiz kıldınız.

Şimdi, makeStar(..)Star örneğini hiçbir şey yerine döndürürse ne olur?

Aşağıdaki örneği inceleyelim: Gördüğünüz gibi

var firstStar:Star; 
var secondStar:Star; 

function makeStar(_x:Number, _y:Number):Star 
{ 
    var s = new Star(); 
    s.x = _x; 
    s.y = _y; 
    return s; 
} 

firstStar = makeStar(50, 150); 
addChild(firstStar); 
secondStar = makeStar(150, 150); 
addChild(secondStar); 

firstStar.x += 100; 
secondStar.y += 100; 

, şimdi yerine oluşturduğunuz sadece sonuncusu, hem yıldızlı işleyebilirsiniz.


Sorunuzu yanıtlamak için: Değerleri işlevlerle döndürüyorsunuz, böylece bu değerlerle çalışmaya devam edebilirsiniz.

+0

Teşekkür ederiz @DodgerThud –

0

Bu yaklaşımın dezavantajı nedir?

var myStar:Star; 

function makeStar(myX:Number, myY:Number, Name:String):void { 
    myStar = new Star(); 
    myStar.x = myX; 
    myStar.y = myY; 
    myStar.name = Name; 
    addChild(myStar); 
} 

makeStar(50,50, "firstStar"); 
makeStar(150,150, "secondStar"); 



getChildByName("firstStar").x = 200; 
+1

Bu sorunun bir cevabı değil, bu ayrı bir soru. Bu yaklaşımın dezavantajı hızdır, 'getChildByName' her zaman bir referans kullanmaktan daha yavaş olacaktır, çünkü aradığınız örneği aramak zorundadır. 100.000 Yıldız olduğunu ve 65.432 yıldızı manipüle etmek istediğini hayal et. Dahili olarak, hatırı sayılır bir zaman alacağı bir arama algoritmasından geçmesi gerekecek. – DodgerThud

İlgili konular