Veri türleri

Veri türü , bir değerler kümesini tanımlar. Örneğin, Boolean veri türü tam olarak iki değerden oluşan bir kümedir: true ve false . ActionScript 3.0, Boolean veri türüne ek olarak, String, Number ve Array gibi birkaç tane daha yaygın kullanılan veri türünü tanımlar. Özel bir değer kümesini tanımlamak için sınıfları veya arabirimleri kullanarak kendi veri türlerinizi tanımlayabilirsiniz. İlkel veya karmaşık olsun , ActionScript 3.0'daki tüm değerler nesnedir.

İlkel değer , şu veri türlerinden birine ait olan bir değerdir: Boolean, int, Number, String ve uint. ActionScript, bellek ve hız eniyileştirmesini olanaklı kılacak şekilde ilkel değerleri sakladığından, ilkel değerlerle çalışılması genellikle karmaşık değerlerle çalışılmasından daha hızlıdır.

Not: ActionScript, teknik ayrıntılara ilgi duyan okuyucular için ilkel değerleri sabit nesneler şeklinde dahili olarak saklar. Bunların sabit nesneler olarak saklanması, başvuruya göre iletmenin değere göre iletme kadar etkili olduğu anlamına gelir. Başvurular genellikle değerlerin kendisinden çok daha küçük olduğundan bu, bellek kullanımını azaltıp çalıştırma hızını da artırır.

Karmaşık değer , ilkel olmayan bir değerdir. Karmaşık değerler kümesini tanımlayan veri türleri arasında, Array, Date, Error, Function, RegExp, XML ve XMLList yer alır.

Çoğu programlama dili, ilkel değerler ile bunların sarıcı değerleri arasında ayrım yapar. Örneğin, Java, bir int ilkel değerine ve bunu saran java.lang.Integer sınıfına sahiptir. Java ilkel değerleri nesne değildir ancak bunların sarıcıları nesnedir ve bu da bazı işlemler için ilkel değerleri, bazı işlemler için de sarıcı nesneleri daha uygun hale getirir. ActionScript 3.0'da ilkel değerler ve bunların sarıcı nesneleri pratik amaçlar için birbirinden ayırt edilemez. İlkel değerler de dahil olmak üzere tüm değerler nesnedir. Çalışma zamanı, bu ilkel türleri, nesne gibi davranan ancak nesne oluşturmayla ilişkili normal yükü gerektirmeyen özel durumlar olarak değerlendirir. Başka bir deyişle, aşağıdaki iki kod satırı eşdeğerdir:

var someInt:int = 3; 
var someInt:int = new int(3);

Yukarıda listelenen tüm ilkel ve karmaşık veri türleri, ActionScript 3.0 çekirdek sınıfları tarafından tanımlanır. Çekirdek sınıflar, new operatörü yerine değişmez değerler kullanarak nesneler oluşturmanıza olanak sağlar. Örneğin, aşağıdaki gibi, değişmez bir değer veya Array sınıfı yapıcısını kullanarak bir dizi oluşturabilirsiniz:

var someArray:Array = [1, 2, 3]; // literal value 
var someArray:Array = new Array(1,2,3); // Array constructor

Tür denetleme

Tür denetleme, derleme zamanında veya çalışma zamanında gerçekleşebilir. C++ ve Java gibi statik olarak türlenmiş diller, tür denetlemesini derleme zamanında yapar. Smalltalk ve Python gibi dinamik olarak türlenmiş diller, tür denetlemesini çalışma zamanında işler. ActionScript 3.0, dinamik olarak türlenmiş bir dil olarak çalışma zamanı tür denetlemesi yapar ancak katı mod adı verilen özel bir derleyici moduyla da derleme zamanı tür denetlemesini destekler. Katı modda tür denetlemesi hem derleme zamanında hem de çalışma zamanında gerçekleşir ancak standart modda, tür denetlemesi yalnızca çalışma zamanında gerçekleşir.

Dinamik olarak türlenmiş diller, siz kodunuzu yapılandırırken çok yüksek esneklik sunar ancak bu, çalışma zamanında tür hatalarının verilmesine neden olur. Statik olarak türlenmiş diller, tür hatalarını derleme zamanında bildirir ancak bu da tür bilgilerinin derleme zamanında bilinmesini gerektirir.

Derleme zamanı tür denetlemesi

Proje boyutu arttıkça, olabildiğince erkenden tür hatalarının yakalanmasının önemi artıp veri türü esnekliğinin önemi azaldığından, derleme zamanı tür denetlemesi genellikle daha büyük projelerde kullanışlıdır. Bu nedenle de Flash Professional ve Flash Builder uygulamalarında ActionScript derleyicisi varsayılan olarak sıkı modda çalışacak şekilde ayarlanmıştır.

Adobe Flash Builder

Flash Builder uygulamasında, Proje Özellikleri iletişim kutusunda ActionScript derleyici ayarları üzerinden sıkı modu devre dışı bırakabilirsiniz.

Derleme zamanı tür denetlemesi sağlamak için, derleyicinin kodunuzdaki değişkenlerin veya ifadelerin veri türü bilgilerini bilmesi gerekir. Bir değişkenin veri türünü açıkça bildirmek için, değişken adına son ek olarak iki nokta operatörünü ( : ) ve ardından veri türünü ekleyin. Veri türünü bir parametreyle ilişkilendirmek için, iki nokta operatörünü ve ardından da veri türünü kullanın. Örneğin, aşağıdaki kod, xParam parametresine veri türü bilgilerini ekler ve açık bir veri türüyle bir değişkeni myParam olarak bildirir:

function runtimeTest(xParam:String) 
{ 
    trace(xParam); 
} 
var myParam:String = "hello"; 
runtimeTest(myParam);

ActionScript derleyicisi, katı modda tür uyuşmazlıklarını derleyici hataları olarak bildirir. Örneğin, aşağıdaki kod, Object türünde bir işlev parametresini xParam olarak bildirir, ancak daha sonra bu parametreye String ve Number türünde değerler atamayı dener. Bu da katı modda bir derleyici hatası oluşturur.

function dynamicTest(xParam:Object) 
{ 
    if (xParam is String) 
    { 
        var myStr:String = xParam; // compiler error in strict mode 
        trace("String: " + myStr); 
    } 
    else if (xParam is Number) 
    { 
        var myNum:Number = xParam; // compiler error in strict mode 
        trace("Number: " + myNum); 
    } 
}

Ancak katı modda da, atama deyiminin sağ tarafını türlenmemiş şekilde bırakarak derleme zamanı tür denetlemesini seçerek devre dışı bırakabilirsiniz. Bir tür ek açıklamasını çıkararak veya özel yıldız ( * ) tür ek açıklamasını kullanarak bir değişkeni ya da ifadeyi türlenmemiş olarak işaretleyebilirsiniz. Örneğin, önceki örnekte yer alan xParam parametresi, artık tür ek açıklaması içermeyecek şekilde değiştirilirse, kod sıkı modda derlenir:

function dynamicTest(xParam) 
{ 
    if (xParam is String) 
    { 
        var myStr:String = xParam; 
        trace("String: " + myStr); 
    } 
    else if (xParam is Number) 
    { 
        var myNum:Number = xParam; 
        trace("Number: " + myNum); 
    } 
} 
dynamicTest(100) 
dynamicTest("one hundred");

Çalışma zamanı tür denetlemesi

Katı modda da, standart modda da derleme yapsanız, ActionScript 3.0'da, çalışma zamanı tür denetlemesi gerçekleşir. Bir dizi bekleyen bir işleve argüman olarak 3 değerinin iletildiği bir durumu göz önünde bulundurun. 3 değeri, Array veri türüyle uyumlu olmadığından, katı modda derleyici bir hata oluşturur. Sıkı modu devre dışı bırakıp standart modda çalışırsanız, derleyici tür uyuşmazlığından şikayetçi olmaz ancak çalışma zamanı tür denetlemesi bir çalışma zamanı hatası verir.

Aşağıdaki örnek, bir Array argümanı bekleyen ancak kendisine 3 değeri iletilen typeTest() adındaki bir işlevi gösterir. 3 değeri, parametrenin bildirilen veri türünün (Array) bir üyesi olmadığından bu, standart modda bir çalışma zamanı hatasına yol açar.

function typeTest(xParam:Array) 
{ 
    trace(xParam); 
} 
var myNum:Number = 3; 
typeTest(myNum);  
// run-time error in ActionScript 3.0 standard mode

Katı modda çalıştığınız halde çalışma zamanı tür hatası aldığınız durumlar da olabilir. Katı modu kullanırken türlenmemiş bir değişken kullanarak derleme zamanı tür denetlemesini devre dışı bırakırsanız bu mümkün olur. Türlenmemiş bir değişken kullandığınızda, tür denetlemesini ortadan kaldırmış olmazsınız yalnızca çalışma zamanına ertelemiş olursunuz. Örneğin, önceki örnekte yer alan myNum değişkeninin bildirilmiş bir veri türü yoksa, derleyici tür uyuşmazlığını algılayamaz; ancak kod, atama deyiminin sonucu olarak 3 değerine ayarlanan myNum çalışma zamanı değerini Array veri türüne ayarlanmış xParam türüyle karşılaştırdığından, bir çalışma zamanı hatası oluşturur.

function typeTest(xParam:Array) 
{ 
    trace(xParam); 
} 
var myNum = 3; 
typeTest(myNum);  
// run-time error in ActionScript 3.0

Çalışma zamanı tür denetlemesi ayrıca derleme zamanı tür denetlemesine göre mirasın daha esnek kullanılmasını sağlar. Standart mod, tür denetlemesini çalışma zamanına erteleyerek, yukarı çevrim de yapsanız bir alt sınıfın özelliklerine başvurmanıza olanak sağlar. Bir sınıf örneğinin türünü belirtmek için bir temel sınıf kullanıp bu sınıf türü örneğini başlatmak için bir alt sınıf kullandığınızda yukarı çevrim gerçekleşir. Örneğin, genişletilebilen ClassBase adında bir sınıf oluşturabilirsiniz ( final niteliğine sahip sınıflar genişletilemez):

class ClassBase 
{ 
}

Daha sonra aşağıdaki gibi, ClassExtender adında olan ve someString adında bir özellik içeren, ClassBase sınıfının bir alt sınıfını oluşturabilirsiniz:

class ClassExtender extends ClassBase 
{ 
    var someString:String; 
}

Her iki sınıfı da kullanıp ClassBase veri türü kullanılarak bildirilen ancak ClassExtender yapıcısı kullanılarak başlatılan bir sınıf örneği oluşturabilirsiniz. Temel sınıf, alt sınıfta bulunmayan özellikleri veya yöntemleri içermediğinden, yukarı çevrim güvenli bir işlem olarak değerlendirilir.

var myClass:ClassBase = new ClassExtender();

Ancak bir alt sınıf, temel sınıfının içermediği özellikleri veya yöntemleri içermez. Örneğin, ClassExtender sınıfı, ClassBase sınıfında varolmayan someString özelliğini içerir. ActionScript 3.0 standart modunda, aşağıdaki örnekte gösterildiği gibi, bir derleme zamanı hatası oluşturmadan myClass örneğini kullanarak bu özelliğe başvurabilirsiniz:

var myClass:ClassBase = new ClassExtender(); 
myClass.someString = "hello"; 
// no error in ActionScript 3.0 standard mode

is operatörü

is operatörü, bir değişkenin veya ifadenin belirli bir veri türünün üyesi olup olmadığını test etmenize olanak tanır. Önceki ActionScript sürümlerinde, instanceof operatörü bu işlevselliği sağlamıştır ancak ActionScript 3.0'da instanceof operatörü, veri türü üyeliğini test etmek için kullanılmamalıdır. x instanceof y ifadesi yalnızca y varlığı için x prototip zincirini denetlediğinden, elle tür denetleme için instanceof operatörü yerine is operatörü kullanılmalıdır. (Ayrıca ActionScript 3.0'da prototip zinciri, miras hiyerarşisinin tam resmini sağlamaz.)

is operatörü uygun miras hiyerarşisini inceler ve yalnızca bir nesnenin belirli bir sınıfın örneği olup olmadığını denetlemek için değil, bir nesnenin belirli bir arabirimi uygulayan bir sınıf örneği olup olmadığını denetlemek için de kullanılabilir. Aşağıdaki örnek, mySprite adında bir Sprite sınıfı örneği oluşturur ve mySprite öğesinin Sprite ve DisplayObject sınıflarının bir örneği olup olmadığını ve IEventDispatcher arabirimini uygulayıp uygulamadığını test etmek için is operatörünü kullanır:

var mySprite:Sprite = new Sprite(); 
trace(mySprite is Sprite); // true 
trace(mySprite is DisplayObject);// true 
trace(mySprite is IEventDispatcher); // true

is operatörü, miras hiyerarşisini denetler ve mySprite örneğinin Sprite ve DisplayObject sınıflarıyla uyumlu olduğunu düzgün şekilde bildirir. (Sprite sınıfı, DisplayObject sınıfının bir alt sınıfıdır.) is operatörü ayrıca mySprite öğesinin IEventDispatcher arabirimini uygulayan herhangi bir sınıftan miras alıp almadığını da denetler. Sprite sınıfı, IEventDispatcher arabirimini uygulayan IEventDispatcher sınıfından miras aldığından, is operatörü, mySprite öğesinin aynı arabirimini uyguladığını doğru şekilde bildirir.

Aşağıdaki örnek, is operatörü yerine instanceof operatörünü kullanarak önceki örnekteki testlerin aynısını gösterir. instanceof operatörü, mySprite öğesinin Sprite veya DisplayObject öğesinin bir örneği olduğunu doğru şekilde tanımlar ancak mySprite öğesinin IEventDispatcher arabirimini uygulayıp uygulamadığını test etmek için kullanıldığında false değerini döndürür.

trace(mySprite instanceof Sprite); // true 
trace(mySprite instanceof DisplayObject);// true 
trace(mySprite instanceof IEventDispatcher); // false

as operatörü

as operatörü, bir ifadenin belirli bir veri türünün üyesi olup olmadığını denetlemenize olanak tanır. Ancak is operatöründen farklı olarak as operatörü bir Boolean değeri döndürmez. as operatörü, true yerine ifadenin değerini ve false yerine de null değerini döndürür. Aşağıdaki örnek, Sprite örneğinin DisplayObject, IEventDispatcher ve Number veri türlerinden hangisinin üyesi olduğunu denetleme gibi basit bir durumda is operatörü yerine as operatörü kullanılmasının sonuçlarını gösterir.

var mySprite:Sprite = new Sprite(); 
trace(mySprite as Sprite);                 // [object Sprite] 
trace(mySprite as DisplayObject);                 // [object Sprite] 
trace(mySprite as IEventDispatcher);                 // [object Sprite] 
trace(mySprite as Number);                                       // null

as operatörünü kullandığınızda, sağdaki işlenenin bir veri türü olması gerekir. Sağdaki işlenen olarak veri türü dışında bir ifade kullanma girişimi hataya yol açar.

Dinamik sınıflar

Dinamik sınıf, özellikler ve yöntemler eklenerek veya değiştirilerek çalışma zamanında değiştirilebilen bir nesneyi tanımlar. String sınıfı gibi, dinamik olmayan bir sınıf mühürlenmiş bir sınıftır. Mühürlenmiş bir sınıfa çalışma zamanında özellikler veya yöntemler ekleyemezsiniz.

Bir sınıfı bildirirken, dynamic niteliğini kullanarak dinamik sınıflar oluşturursunuz. Örneğin, aşağıdaki kod, Protean adında dinamik bir sınıf oluşturur:

dynamic class Protean 
{ 
    private var privateGreeting:String = "hi"; 
    public var publicGreeting:String = "hello"; 
    function Protean() 
    { 
        trace("Protean instance created"); 
    } 
}

Daha sonra Protean sınıfının bir örneğini başlatırsanız, sınıf tanımının dışında buna özellikler veya yöntemler ekleyebilirsiniz. Örneğin, aşağıdaki kod, Protean sınıfının bir örneğini oluşturur ve örneğe aString adında bir özellik ve aNumber adında bir özellik ekler:

var myProtean:Protean = new Protean(); 
myProtean.aString = "testing"; 
myProtean.aNumber = 3; 
trace(myProtean.aString, myProtean.aNumber); // testing 3

Dinamik sınıf örneğine eklediğiniz özellikler çalışma zamanı varlıklardır, bu nedenle tüm denetlemeleri çalışma zamanında yapılır. Bu şekilde eklediğiniz bir özelliğe tür ek açıklaması ekleyemezsiniz.

Ayrıca bir işlev tanımlayıp bu işlevi myProtean örneğinin bir özelliğine ekleyerek myProtean örneğine bir yöntem ekleyebilirsiniz. Aşağıdaki kod, izleme deyimini traceProtean() adındaki bir yönteme taşır:

var myProtean:Protean = new Protean(); 
myProtean.aString = "testing"; 
myProtean.aNumber = 3; 
myProtean.traceProtean = function () 
{ 
    trace(this.aString, this.aNumber); 
}; 
myProtean.traceProtean(); // testing 3

Ancak bu şekilde oluşturulan yöntemlerin, Protean sınıfının özel özelliklerine veya yöntemlerine erişimi yoktur. Ayrıca, Protean sınıfının genel özelliklerine veya yöntemlerine başvuruların da this anahtar sözcüğüyle ya da sınıf adıyla nitelenmesi gerekir. Aşağıdaki örnek, Protean sınıfının özel ve genel değişkenlerine erişmeye çalışan traceProtean() yöntemini gösterir.

myProtean.traceProtean = function () 
{ 
    trace(myProtean.privateGreeting); // undefined 
    trace(myProtean.publicGreeting); // hello 
}; 
myProtean.traceProtean();

Veri türleri açıklamaları

İlkel veri türleri arasında Boolean, int, Null, Number, String, uint ve void yer alır. ActionScript çekirdek sınıfları ayrıca şu karmaşık veri türlerini de tanımlar: Object, Array, Date, Error, Function, RegExp, XML ve XMLList.

Boolean veri türü

Boolean veri türü iki değer içerir: true ve false . Boolean türündeki değişkenler için diğer değerler geçerli değildir. Bildirilmiş ancak başlatılmamış bir Boolean değişkeninin varsayılan değeri false olur.

int veri türü

int veri türü, dahili olarak 32 bit tam sayı şeklinde saklanır ve

-2.147.483.648 (-2 31 ) ile 2.147.483.647 (2 31 - 1) (dahil) arasındaki tam sayılar kümesini kapsar. Önceki ActionScript sürümleri yalnızca hem tam sayı hem de kayan nokta sayıları için kullanılan Number veri türünü sunardı. ActionScript 3.0'da şimdi 32-bit işaretli ve işaretsiz tam sayılar için düşük düzeyli makine türlerine erişiminiz vardır. Değişkeninizin kayan nokta sayılarını kullanmasına gerek yoksa, Number veri türü yerine int veri türünün kullanılması hem daha hızlı hem de daha etkili olur.

Minimum ve maksimum int değerleri aralığı dışında kalan tam sayı değerleri için, pozitif ve negatif 9.007.199.254.740.992 arasındaki değerleri (53-bit tam sayı değerleri) işleyebilen Number veri türünü kullanın. int veri türündeki değişkenler için varsayılan değer 0'dır.

Null veri türü

Null veri türü yalnızca bir değer içerir, null . Bu, String veri türü için ve Object sınıfı da dahil olmak üzere karmaşık veri türlerini tanımlayan tüm sınıflar için varsayılan değerdir. Boolean, Number, int ve uint gibi diğer ilkel veri türlerinin hiçbiri null değerini içermez. Çalışma zamanında, null değeri, Boolean, Number, int, veya uint gibi değişken türlerine null atamaya çalışırsanız uygun varsayılan değere dönüştürülür. Bu veri türünü tür ek açıklaması olarak kullanamazsınız.

Number veri türü

ActionScript 3.0'da Number veri türü, tam sayıları, işaretsiz tam sayıları ve kayan nokta sayılarını temsil edebilir. Ancak, performansı en üst düzeye çıkarmak için, Number veri türünü yalnızca 32-bit int ve uint türlerinin saklayamayacağı kadar büyük tam sayı değerleri için ve kayan nokta sayıları için kullanmanız gerekir. Bir kayan nokta sayısını saklamak için, sayıya bir ondalık işareti dahil edin. Ondalık işaretini çıkarırsanız, sayı bir tam sayı olarak saklanır.

Number veri türü, İkili Kayan Nokta Aritmetiği için IEEE Standardı (IEEE-754) tarafından belirtilen 64-bit çift kesinlikli biçimi kullanır. Bu standart, kayan nokta sayılarının mevcut 64 bit kullanılarak nasıl saklanacağını dikte eder Sayının pozitif veya negatif olduğunu belirlemek için tek bir bit kullanılır. Üst için taban 2 olarak saklanan 11 bit kullanılır. Geriye kalan 52 bit, significand ( ayrıca mantissa olarak da adlandırılır) öğesini (üst tarafından belirtilen güce yükseltilen rakamdır) saklamak için kullanılır.

Number veri türü, bir üssü saklamak için bit'lerinden bir kısmını kullanarak, significand için tüm bit'leri kullandığında saklayabildiğinden çok daha büyük kayan nokta sayılarını saklayabilir. Örneğin, Number veri türü, significand öğesini saklamak için tüm 64 bit'i de kullansaydı, 2 65 - 1 büyüklüğünde bir sayıyı saklayabilirdi. Number veri türü bir üssü saklamak için 11 bit kullanarak, significand öğesini 2 1023 kuvvetine yükseltebilir.

Number türünün temsil edebildiği maksimum ve minimum değerler, Number sınıfının Number.MAX_VALUE ve Number.MIN_VALUE adındaki statik özelliklerinde saklanır.

Number.MAX_VALUE == 1.79769313486231e+308 
Number.MIN_VALUE == 4.940656458412467e-324

Bu sayı aralığı büyük olsa da, bu geniş aralık kesinlik düzeyini azaltır. Number veri türü, significand öğesini saklamak için 52 bit kullanır ve bu da, kesin şekilde temsil edilecek 52 bit'ten fazlasını gerektiren sayıların (örn. 1/3 kesiri) yalnızca yaklaşık değerler olmasına neden olur. Uygulamanız için ondalık sayılarda mutlak kesinlik gerekiyorsa, ikili kayan nokta aritmetiğinin tersine ondalık kayan nokta aritmetiğini uygulayan bir yazılım kullanmanız gerekir.

Number veri türünde tam sayı değerlerini sakladığınızda, significand öğesinin yalnızca 52 bit'i kullanılır. Number veri türü, -9.007.199.254.740.992 (-2 53 ) ile 9.007.199.254.740.992 (2 53 ) arasındaki tam sayıları temsil etmek için bu 52 bit'i ve özel gizlenmiş bit'i kullanır.

NaN değeri yalnızca Number türündeki değişkenler için varsayılan değer olarak değil, aynı zamanda bir sayı döndürmesi gerektiği halde sayı döndürmeyen herhangi bir işlemin sonucu olarak da kullanır. Örneğin, negatif bir sayının kare kökünü hesaplamayı denerseniz, sonuç NaN olur. Diğer özel Number değerleri arasında pozitif sonsuzluk ve negatif sonsuzluk yer alır.

Not: 0 değerine bölme işleminin sonucu, yalnızca bölen de 0 olduğunda NaN değerini verir. 0 değerine bölme işlemi, bölen pozitif olduğunda infinity değerini, bölen negatif olduğunda ise -infinity değerini verir.

String veri türü

String veri türü, 16-bit karakterlerin bir sırasını temsil eder. Dizeler, UTF-16 biçimi kullanılarak dahili şekilde Unicode karakterleri olarak saklanır. Dizeler, Java programlama dilinde olduğu gibi, sabit değerlerdir. String değerindeki bir işlem, yeni bir dize örneği döndürür. String veri türüyle bildirilen bir değişkenin varsayılan değeri, null şeklindedir. null değeri boş dizeyle ( "" ) aynı değildir. null değeri değişkenin içinde bir değer saklamadığı anlamına gelirken, boş dize, değerin hiçbir karakter içermeyen bir String olan bir değer içerdiği anlamına gelir.

uint veri türü

uint veri türü, dahili olarak 32-bit işaretsiz tam sayı şeklinde saklanır ve 0 ile 4.294.967.295 (2 32 - 1) arasındaki tam sayıların kümesini kapsar. Negatif olmayan tam sayıları çağıran özel koşullar için uint veri türünü kullanın. Örneğin, int veri türü, renk değerlerinin işlenmesi için uygun olmayan dahili bir işaret bit'i içerdiğinden, piksel rengi değerlerini temsil etmek için uint veri türünü kullanmanız gerekir. Maksimum uint değerinden büyük tam sayı değerleri için, 53-bit tam sayı değerlerini işleyebilen Number veri türünü kullanın. uint veri türündeki değişkenler için varsayılan değer 0'dır.

void veri türü

Void veri türü yalnızca bir değer içerir: undefined . Önceki ActionScript sürümlerinde undefined , Object sınıfının örnekleri için varsayılan değerdi. ActionScript 3.0'da, Object örneklerinin varsayılan değeri null şeklindedir. Object sınıfının bir örneğine undefined değerini atamayı denerseniz, değer null değerine dönüştürülür. Türlenmemiş değişkenlere yalnızca undefined değerini atayabilirsiniz. Türlenmemiş değişkenler, tür ek açıklaması içermeyen veya tür ek açıklaması için yıldız ( * ) sembolünü kullanan değişkenlerdir. void öğesini yalnızca döndürme tür ek açıklaması olarak kullanabilirsiniz.

Object veri türü

Object veri türü, Object sınıfı tarafından tanımlanır. Object sınıfı, ActionScript'teki tüm sınıf tanımlamaları için temel sınıf görevi görür. Object veri türünün ActionScript 3.0 sürümü, önceki sürümlerden üç şekilde farklılık gösterir. İlk olarak, Object veri türü artık tür ek açıklaması içermeyen değişkenlere atanan varsayılan veri türü değildir. İkinci olarak, Object veri türü, Object örneklerinin varsayılan değeri olarak kullanılan undefined değerini artık içermez. Üçüncü olarak, ActionScript 3.0'da, Object sınıfının örnekleri için varsayılan değer null şeklindedir.

Önceki ActionScript sürümlerinde, Object veri türüne tür ek açıklaması içermeyen bir değişken otomatik olarak atanırdı. Artık türlenmemiş değişken kavramını içeren ActionScript 3.0'da bu geçerli değildir. Tür ek açıklaması içermeyen değişkenler artık türlenmemiş olarak değerlendirilir. Kodunuzun okuyucularına, amacınızın bir değişkene tür vermemek olduğunu açıkça belirtmek isterseniz, tür ek açıklamasının çıkarılmasına eşdeğer şekilde, tür ek açıklaması için yıldız ( * ) sembolünü kullanabilirsiniz. Aşağıdaki örnekte, her ikisi de x türlenmemiş değişkenini bildiren iki eşdeğer deyim gösterilmektedir:

var x 
var x:*

Yalnızca türlenmemiş değişkenler undefined değerini barındırabilir. Bir veri türüne sahip değişkene undefined değerini atamaya çalışırsanız, çalışma zamanı, undefined değerini o veri türünün varsayılan değerine dönüştürür. Object veri türü örnekleri için, varsayılan değer null değeridir. Bu durum, undefined değerini bir Object örneğine atamaya çalışırsanız, değerin null değerine dönüştürüleceği anlamına gelir.

Tür dönüştürmeleri

Bir değer farklı veri türünde bir değere dönüştürüldüğünde, tür dönüştürmesi gerçekleştirilmiş olur. Tür dönüştürmeleri örtük veya açıkça olabilir. coercion olarak da bilinen örtük dönüştürme, bazen çalışma zamanında gerçekleştirilir. Örneğin, Boolean veri türündeki bir değişkene 2 değeri atanırsa, değer değişkene atanmadan önce 2 değeri true Boolean değerine dönüştürülür. Çevrim olarak da adlandırılan açıkça dönüştürme, kodunuz derleyiciye bir veri türündeki değişkeni farklı bir veri türüne aitmiş gibi değerlendirmesini bildirdiğinde gerçekleşir. İlkel değerler bulunduğunda, çevrim gerçek anlamda değerleri bir veri türünden diğerine dönüştürür. Bir nesneyi farklı bir türe çevirmek için, nesne adını parantez içine alıp ve bunun başına yeni türün adını getirirsiniz. Örneğin, aşağıdaki kod bir Boolean değerini alıp tam sayıya çevirir:

var myBoolean:Boolean = true; 
var myINT:int = int(myBoolean); 
trace(myINT); // 1

Örtük dönüştürmeler

Örtük dönüştürmeler, birçok bağlamda çalışma zamanında gerçekleşir:

  • Atama deyimlerinde

  • Değerler işlev argümanları olarak iletildiğinde

  • Değerler işlevlerden döndürüldüğünde

  • Toplama ( + ) operatörü gibi belirli operatörleri kullanan ifadelerde

    Kullanıcı tanımlı türler için örtük dönüştürmeler, dönüştürülecek değer hedef sınıfın bir örneği veya hedef sınıftan türetilmiş bir sınıf olduğunda gerçekleşir. Örtük dönüştürme başarısız olursa bir hata oluşur. Örneğin, aşağıdaki kod başarılı bir örtük dönüştürme ve başarısız bir örtük dönüştürme içerir:

    class A {} 
    class B extends A {} 
     
    var objA:A = new A(); 
    var objB:B = new B(); 
    var arr:Array = new Array(); 
     
    objA = objB; // Conversion succeeds. 
    objB = arr; // Conversion fails.

    İlkel türler için örtük dönüştürmeler, açıkça dönüştürme işlevleri tarafından çağrılan aynı dahili dönüştürme algoritmaları çağrılarak işlenir.

Açıkça dönüştürmeler

Derleme zamanı hatası oluşturacak bir tür uyuşmazlığı istemediğiniz zamanlar olabileceğinden, katı modda derleme yaparken açıkça dönüştürmeleri veya çevrimi kullanmanız yararlı olur. Zorlamanın değerlerinizi çalışma zamanında doğru şekilde dönüştüreceğini bildiğinizde bu durum geçerli olabilir. Örneğin, bir formdan alınan verilerle çalıştığınızda, belirli dize değerlerini sayısal değerlere dönüştürmek için zorlamayı uygulamak isteyebilirsiniz. Aşağıdaki kod, standart modda doğru şekilde de çalışsa, bir derleme zamanı hatası oluşturur:

var quantityField:String = "3"; 
var quantity:int = quantityField; // compile time error in strict mode

Katı modu kullanmaya devam etmek ancak bir yandan da dizenin bir tam sayıya dönüştürülmesini istiyorsanız, aşağıdaki gibi açıkça dönüştürmeyi kullanabilirsiniz:

var quantityField:String = "3"; 
var quantity:int = int(quantityField); // Explicit conversion succeeds.

int, uint ve Number türlerine çevrim

Herhangi bir veri türünü üç sayı türünden birine çevirebilirsiniz: int, uint ve Number. Number herhangi bir sebepten dönüştürülemezse, 0 varsayılan değeri int ve uint veri türleri için atanır ve NaN varsayılan değeri Number veri türü için atanır. Bir Boolean değerini bir sayıya dönüştürürseniz, true değeri 1 ve false değeri de 0 olur.

var myBoolean:Boolean = true; 
var myUINT:uint = uint(myBoolean); 
var myINT:int = int(myBoolean); 
var myNum:Number = Number(myBoolean); 
trace(myUINT, myINT, myNum); // 1 1 1 
myBoolean = false; 
myUINT = uint(myBoolean); 
myINT = int(myBoolean); 
myNum = Number(myBoolean); 
trace(myUINT, myINT, myNum); // 0 0 0

Yalnızca rakam içeren dize değerleri, sayı türlerinden birine başarıyla dönüştürülebilir. Sayı türleri ayrıca negatif sayı gibi görünen dizeleri veya onaltılık bir değeri (örneğin, 0x1A ) temsil eden dizeleri dönüştürebilir. Dönüştürme işlemi, dize değerinin başındaki ve sonundaki boşluk karakterlerini yoksayar. Ayrıca Number() öğesini kullanarak kayan nokta sayısı gibi görünen dizeleri de çevirebilirsiniz. Ondalık işareti eklenmesi, uint() ve int() öğelerinin, ondalık işaretini ve bu işareti takip eden karakterleri kırparak bir tam sayı döndürmesine neden olur. Örneğin, aşağıdaki dize değerleri sayılara çevrilebilir:

trace(uint("5")); // 5 
trace(uint("-5")); // 4294967291. It wraps around from MAX_VALUE 
trace(uint(" 27 ")); // 27 
trace(uint("3.7")); // 3 
trace(int("3.7")); // 3 
trace(int("0x1A")); // 26 
trace(Number("3.7")); // 3.7

Sayısal olmayan karakterler içeren dize değerleri, int() veya uint() ile çevrildiğinde 0 değerini; Number() ile çevrildiğinde ise NaN değerini döndürür. Dönüştürme işlemi, baştaki ve sondaki boşlukları yoksayar ancak dizede iki sayıyı ayıran bir boşluk varsa, 0 veya NaN değerini döndürür.

trace(uint("5a")); // 0 
trace(uint("ten")); // 0 
trace(uint("17 63")); // 0

ActionScript 3.0'da, Number() işlevi artık sekizlik veya 8 tabanlı sayıları desteklemez. ActionScript 2.0 Number() işlevine başında sıfır bulunan bir dize sağlarsanız, sayı sekizlik bir sayı olarak yorumlanır ve ondalık eşdeğerine dönüştürülür. ActionScript 3.0'daki Number() işlevinde ise bu geçerli değildir, burada baştaki sıfır yoksayılır. Örneğin, aşağıdaki kod, farklı ActionScript sürümleri kullanılarak derlendiğinde farklı çıktı oluşturur:

trace(Number("044"));  
// ActionScript 3.0 44 
// ActionScript 2.0 36

Bir sayısal türdeki değer, farklı bir sayısal türdeki değişkene atandığında çevrim gerekmez. Katı modda da sayısal türler örtük olarak başka sayısal türlere dönüştürülür. Başka bir deyişle, bazı durumlarda bir tür aralığı aşıldığında beklenmeyen değerler ortaya çıkabilir. Aşağıdaki değerlerin bazıları beklenmeyen değerler oluştursa da, tümü sıkı modda derlenir:

var myUInt:uint = -3; // Assign int/Number value to uint variable 
trace(myUInt); // 4294967293 
 
var myNum:Number = sampleUINT; // Assign int/uint value to Number variable 
trace(myNum) // 4294967293 
 
var myInt:int = uint.MAX_VALUE + 1; // Assign Number value to uint variable 
trace(myInt); // 0 
 
myInt = int.MAX_VALUE + 1; // Assign uint/Number value to int variable 
trace(myInt); // -2147483648

Aşağıdaki tabloda, başka veri türlerinden Number, int veya uint veri türüne çevrim sonuçları özetlenmektedir.

Veri türü veya değeri

Number, int veya uint türüne dönüştürme sonucu

Boolean

Değer true olursa 1; aksi takdirde 0.

Date

Date nesnesinin dahili temsili; bu, 1 Ocak 1970, gece yarısı evrensel saatinden bu yana geçen milisaniye sayısıdır.

null

0

Nesne

Örnek null olursa ve Number türüne dönüştürülürse NaN ; aksi takdirde 0.

Dize

Dize bir number türüne dönüştürülebilirse bir sayı, aksi takdirde Number türüne dönüştürülürse NaN veya int ya da uint türüne dönüştürülürse 0.

undefined

Number türüne dönüştürülürse NaN ; int veya uint türüne dönüştürülürse 0.

Boolean değerine çevrim

Herhangi bir sayısal veri türünden (uint, int ve Number) Boolean değerine çevrim, sayısal değer 0 olursa false , aksi takdirde true değerini verir. Number veri türü için, NaN değeri de false değerini verir. Aşağıdaki örnek, -1, 0 ve 1 sayılarının çevrim sonuçlarını gösterir:

var myNum:Number; 
for (myNum = -1; myNum<2; myNum++) 
{ 
    trace("Boolean(" + myNum +") is " + Boolean(myNum)); 
}

Örnekten elde edilen çıktı, üç sayıdan yalnızca 0 sayısının false değeri döndürdüğünü gösterir:

Boolean(-1) is true 
Boolean(0) is false 
Boolean(1) is true

Bir String değerinden Boolean değerine çevrim, dize null veya boş dize ( "" ) olduğunda false değerini döndürür. Aksi takdirde, true değerini döndürür.

var str1:String; // Uninitialized string is null. 
trace(Boolean(str1)); // false 
 
var str2:String = ""; // empty string 
trace(Boolean(str2)); // false 
 
var str3:String = " "; // white space only 
trace(Boolean(str3)); // true

Object sınıfı örneğinden Boolean değerine çevrim, örnek null ise false değerini; aksi takdirde true değerini döndürür:

var myObj:Object; // Uninitialized object is null. 
trace(Boolean(myObj)); // false 
 
myObj = new Object(); // instantiate  
trace(Boolean(myObj)); // true

Boolean değişkenleri katı modda özel değerlendirmeye tabidir; katı modda çevrim yapmadan herhangi bir veri türündeki değerleri Boolean değişkenine atayabilirsiniz. Tüm veri türlerinden Boolean veri türüne örtük zorlama katı modda da gerçekleşir. Başka bir deyişle, diğer tüm veri türlerinin hemen hemen hepsinden farklı olarak, katı mod hatalarını önlemek için Boolean değerine çevrim gerekmez. Aşağıdaki örneklerin tümü katı modda derleme yapar ve çalışma zamanında beklendiği şekilde davranır:

var myObj:Object = new Object(); // instantiate  
var bool:Boolean = myObj; 
trace(bool); // true 
bool = "random string"; 
trace(bool); // true 
bool = new Array(); 
trace(bool); // true 
bool = NaN; 
trace(bool); // false

Aşağıdaki tabloda, başka veri türlerinden Boolean veri türüne çevrim sonuçları özetlenmektedir:

Veri türü veya değeri

Boolean değerine dönüştürme sonucu

Dize

Değer null veya boş dize ( "" ) olursa false ; aksi takdirde true .

null

false

Number, int veya uint

Değer NaN veya 0 olursa false ; aksi takdirde true .

Nesne

Örnek null olursa false ; aksi takdirde true .

String türüne çevrim

Herhangi bir sayısal veri türünden String veri türüne çevrim, sayının dize halinde temsilini döndürür. Bir Boolean değerinden String veri türüne çevrim, değer true olursa "true" dizesini ve değer false olursa "false" dizesini döndürür.

Bir Object sınıfı örneğinden String veri türüne çevrim, örnek null olursa "null" dizesini döndürür. Aksi takdirde, Object sınıfından String türüne çevrim, "[object Object]" dizesini döndürür.

Array sınıfı örneğinden String türüne çevrim, tüm dizi öğelerinin virgülle ayrılmış bir listesinden oluşan bir dize döndürür. Örneğin, aşağıdaki String veri türüne çevrim işlemi, dizideki üç öğeyi de içeren tek bir dize döndürür:

var myArray:Array = ["primary", "secondary", "tertiary"]; 
trace(String(myArray)); // primary,secondary,tertiary

Date sınıfı örneğinden String türüne çevrim, örneğin içerdiği tarihin dize halinde temsilini döndürür. Örneğin, aşağıdaki örnek, Date sınıfı örneğinin dize halinde temsilini döndürür (çıktıda Pasifik Yaz Saati sonucu gösterilmektedir):

var myDate:Date = new Date(2005,6,1); 
trace(String(myDate)); // Fri Jul 1 00:00:00 GMT-0700 2005

Aşağıdaki tabloda, başka veri türlerinden String veri türüne çevrim sonuçları özetlenmektedir.

Veri türü veya değeri

Dizeye dönüştürme sonucu

Dizi

Tüm dizi öğelerinden oluşmuş bir dize.

Boolean

" true " veya " false "

Date

Date nesnesinin dize halinde temsili.

null

"null"

Number, int veya uint

Sayının dize halinde temsili.

Nesne

Örnek null olursa "null" ; aksi takdirde "[object Object]".