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. Zorlama olarak da adlandırılan örtük dönüştürme, bazen Flash Player veya Adobe AIR uygulaması tarafından çalışma zamanında gerçekleştirilir. Örneğin, Boolean veri türündeki bir değişkene 2 değeri atanırsa, Flash Player veya Adobe AIR uygulaması, değeri değişkene atamadan önce 2 değerini true Boolean değerine dönüştürü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. İlerleyen bölümlerde bu ilkel tür dönüştürmeleri ayrıntılı şekilde ele alınmıştır.
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. Flash Player veya Adobe AIR uygulaması herhangi bir nedenle sayıyı dönüştüremezse, int ve uint veri türleri için 0 varsayılan değeri atanır ve Number veri türü için de NaN varsayılan değeri 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ü katı 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 |
Object | Örnek null olursa ve Number türüne dönüştürülürse, NaN; aksi takdirde, 0. |
String | Flash Player veya Adobe AIR uygulaması dizeyi bir sayıya dönüştürebilirse 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 |
---|---|
String | 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. |
Object | Ö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ül sınırlı bir listesini içeren 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 |
---|---|
Array | Tüm dizi öğelerini içeren bir dize. |
Boolean | "true" veya "false" |
Date | Date nesnesinin dize halinde temsili. |
null | "null" |
Number, int veya uint | Sayının dize halinde temsili. |
Object | Örnek null olursa, "null"; aksi takdirde, "[object Object]". |
0 yorum:
Yorum Gönder