ActionScript 3.0'daki işlevler nesnelerdir. Bir işlev oluşturduğunuzda, yalnızca başka bir işleve parametre olarak iletilmekle kalmayan aynı zamanda kendisine eklenmiş özellik ve yöntemlerin de bulunduğu bir nesne oluşturursunuz.
Başka bir işleve argümanlar olarak iletilen işlevler, değere göre değil, başvuruya göre iletilir. Bir işlevi argüman olarak ilettiğinizde, yöntemi çağırmak için parantez operatörünü değil yalnızca tanımlayıcıyı kullanırsınız. Örneğin, aşağıdaki kod, addEventListener() yöntemine argüman olarak clickListener() adında bir işlev iletir:
addEventListener(MouseEvent.CLICK, clickListener);Array.sort() yöntemi ayrıca bir işlevi kabul eden bir parametreyi de tanımlar. Array.sort()
ActionScript'i ilk defa kullanan programcılar için bu garip görünse de, işlevler tıpkı diğer nesneler gibi özelliklere ve yöntemlere sahip olabilir. Aslında, her işlev, kendisi için tanımlı parametrelerin sayısını saklayan length adında salt okunur bir özelliğe sahiptir. Bu, işleve gönderilen argümanların sayısını bildiren arguments.length özelliğinden farklıdır. ActionScript'te, bir işleve gönderilen argüman sayısının, o işlev için tanımlanmış parametre sayısını aşabileceğini unutmayın. Katı mod, iletilen argümanların sayısı ile tanımlanan parametrelerin sayısı arasında tam eşleşme gerektirdiğinden yalnızca standart modda derleme yapan aşağıdaki örnek, iki özellik arasındaki farkı gösterir:
// Compiles only in standard mode
function traceLength(x:uint, y:uint):void
{
trace("arguments received: " + arguments.length);
trace("arguments expected: " + traceLength.length);
}
traceLength(3, 5, 7, 11);
/* output:
arguments received: 4
arguments expected: 2 */
Standart modda, kendi işlev özelliklerinizi işlev gövdesinin dışında tanımlayabilirsiniz. İşlev özellikleri, işlevle ilgili bir değişkenin durumunu kaydetmenize olanak sağlayan yarı durağan özellikler görevi görebilir. Örneğin, belirli bir işlevin kaç defa çağrıldığını izlemek isteyebilirsiniz. Bir oyun yazıyorsanız ve bir kullanıcının belirli bir komutu kaç defa kullandığını izlemek istiyorsanız, statik sınıf özelliği kullanabilseniz de, bu işlevsellik kullanışlı olabilir. Katı mod, işlevlere dinamik özellikler eklemenize olanak sağlamadığından yalnızca standart modda derleme yapan aşağıdaki örnek, işlev bildirimi dışında bir işlev özelliği oluşturur ve işlev her çağrıldığında özelliği artırır:
// Compiles only in standard mode
var someFunction:Function = function ():void
{
someFunction.counter++;
}
someFunction.counter = 0;
someFunction();
someFunction();
trace(someFunction.counter); // 2
0 yorum:
Yorum Gönder