ActionScript 3.0 :Fonksiyonlar III:
Muttalip TULGAR Tarih: 26/08/2008 Yorum: 0 adet
Okunma : 427 Tutanlar: Bu yazıyı 2 kişi tuttu.
Fonksiyonlar ve "Arguments" Sınıfı
Fonksiyonlara, fonksiyon dışından değer gönderilebildiği için, gönderilen bu değerlerin, fonksiyon içinde tanımlanan parametrelerle uygun olması gerekir. Gönderilen değerler, fonksiyonda belirtilen parametrelerle aynı sayıda ve aynı veri türünde olmalıdır yoksa fonksiyonların çalışmasında bazı sorunlar meydana gelebilir. Fonksiyonlara gönderilen bu değerlere argümanlar (arguments) denir.
function topla(a:Number, b:Number, c:Number)
{
trace(a+b+c);
}
topla(7,3);
Örnekte, dışarıdan fonksiyona "7" ve "3" değerleri gönderilmektedir, ancak "topla" fonksiyonu "a","b" ve "c" parametrelerine sahip olduğu için fonksiyon hata verecektir. Gönderilen değer sayısının parametre sayısı kadar olmalıdır.
a:Number=7, b:Number=3, c:Number=?
//fonksiyon yanlış sayıda parametre hatası verir.
Bu tür sorunları ortadan kaldırmak için Arguments sınıfını kullanmak en iyi çözüm olacaktır. Arguments sınıfı, dizi (array) değişkeni gibi davranarak fonksiyonda tanımlanan parametre sayısından daha fazlasını çağırabilmektedir. Ayrıca arguments nesnesi, fonksiyon içinde tanımlansın ya da tanımlanmasın parametreleri çağırabilmektedir.
Arguments nesnesi, dizi değişkeni gibi davrandığı için Array sınıfının tüm özellik ve metotlarını kullanabilmektedir. Arguments içinde kullanacağımız bir özellikte "arguments.length" dir. "arguments.length", fonksiyona gönderilen tüm parametrelerin sayısını bildirir.
function say(a:Number):void
{
for (var i:Number=0; i<arguments.length; i++) {
trace(arguments[i]);
}
}
say(7,9,8);
//7
//9
//8
Örnekte, fonksiyon içinde sadece "a" adlı sayısal bir parametre tanımlanmıştır. Fonksiyon dışından ise (7,9,8) değerleri fonksiyona gönderilmektedir. Fonksiyonda tanımlanan parametre sayısı ile fonksiyon dışından yollanan parametre sayıları farklı da olsa "arguments" nesnesi, bu farklılığı önemsemeden "for" döngüsü içinde "arguments.length" ile gönderilen tüm parametreleri almakta ve trace(arguments[i]) komut satırıyla da fonksiyonda parametreleri döndürmektedir.
Özyineleme Fonksiyonu (Recursive Function) : "arguments.callee"
"arguments.callee" fonksiyonu, fonksiyonun kendini birden çok çağırması için kullanılan bir fonksiyondur. "arguments.callee" fonksiyonunu kullanılırken, fonksiyonun adını bilmeden, o fonksiyon blokları içerisinde fonksiyonu tekrarlattırabilirsiniz. Özellikle faktöriyel alma gibi matematiksel işlemlerde arguments.callee fonksiyonu tercih sebebidir. Bu fonksiyon içinde bulunduğu fonksiyonun adını referans olarak alır.
function faktoriyel(a:Number)
{
if (a<=1) {
return 1;
} else {
return a * arguments.callee(a - 1);
}
}
trace(faktoriyel(7)); //5040
Fonksiyonun adı değişse bile, fonksiyon doğru olarak çalışacaktır. Çünkü; "arguments.callee" fonksiyonu içindeki bulunduğu fonksiyonun adını referans alır.
Actionscript 3.0’da, daha önceki versiyonlarda kullanılan bir fonksiyon içinde başka bir fonksiyonu çağırma özelliğine sahip "arguments.caller" fonksiyonu artık kullanılmamaktadır.
…(rest) Parametresi:
Actionscript 3.0’ın sunduğu bu yeni parametre, "arguments.length" fonksiyonun işlevi ile aynı iken, "arguments.caller" fonksiyonun sağladığı özelliği sağlayamamaktadır. Bu parametre, dizi parametrelerini belirtmede kullanılırken, arguments nesnesini de etkisiz hale getirir.
function say(...arg):void
{
for (var i:Number=0; i<arg.length; i++) {
trace(arg[i]);
}
}
say(7,9,8);
//7
//9
//8
(…arg) fonksiyonunda "arg" yerine isimlendirme kuralları dikkati alınarak istenilen tanımlama sözcüğü yazılabilir.
function say(...sayicak):void
{
for (var i:Number=0; i<sayicak.length; i++) {
trace(sayicak[i]);
}
}
say(7,9,8);
//7
//9
//8
…(rest) fonksiyonu başka parametrelerle de fonksiyon içinde kullanılır. Ancak fonksiyonun içindeki parametrelerle beraber kullanıldığında, belirtilen parametrelerin sonuç değeri döndürülemez.
function say(a:Number,...sayicak):void
{
for (var i:Number=0; i<sayicak.length; i++) {
trace(sayicak[i]);
}
}
say(7,9,8);
//9
//8
"a" parametresi, "…sayilacak" parametresi ile birlikte kullanıldığı için, trace(sayicak[i]) komut satırında "a" parametresi dikkate alınmaz ve sonuç olarak döndürülemez.
Varsayılan (Default) Parametre:
Actionscript 3.0 ile yeni kullanılan bir başka parametrede varsayılan parametredir. Bu parametre, bir fonksiyon için ilk değeri olan parametre değerleri ile ilk değerleri belirtilmemiş parametreleri birarada kullanmaya izin verir.
function degerleriDondur(a:int, b:int, c:int=8, d:int=13)
{
trace(a,b,c,d)
}
degerleriDondur(1,4);
// 1 4 8 13
Örnekte, "a" ve "b" parametrelerinin fonksiyon içinde ilk değerleri belirtilmemiştir. degerleriDondur(1,4) komut satırındaki 1 ve 4 değerleri, "a" ve "b" için seçmeli (optional) parametrelerdir. "c" ve "d" parametreleri ise gerekli (required) parametrelerdir. "c" ve "d" parametrelerinin ilk değeri vardır.
Eğer ilk değerleri belirtilmeyen parametreler, ilk değerleri olan parametrelerle birlikte kullanılacaksa, ilk değeri olmayan parametreler, parametreler listesinin başında olmalıdır. function degerleriDondur(a:int, b:int, c:int=8, d:int=13) gibi.
function degerleriDondur(a:int=8, b:int, c:int, d:int=13)
komut satırı kullanılırsa hata verecektir. "b" ve "c" parametrelerinin ilk değerleri belirtilmediği için, parametre listesi içinde en başta olmaları gerekiyordu.
Yazan: Muttalip TULGAR
"ActionScript 3.0 :Fonksiyonlar IV: İç içe (nested) Fonksiyonlar" dersinde görüşmek üzere..
İçeriğe kayıtlı yorum bulunmuyor. İlk yorumu siz buradan ekleyebilirsiniz.
Makale
Etkinlikler
Toplantı
Kahraman ve need4code.com Projesi Connect Toplantısı
Kahraman ve need4code.com Projesi Connect Toplantısı
Selam arkadaslar,
Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 411 (1 kayıtlı, 410 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız








