Verilerle çalışırken çoğunlukla değişkenlerin bir veri türünden diğerine dönüştürülmesi gerekir. Örneğin, bir hesaplamanın sonucunu görüntülemek için bir kayan sayıyı dizeye dönüştürmek gerekir.
Verse’te tüm tür dönüşümleri açıktır. Yani bir nesneyi farklı bir veri türüne dönüştürmek için ToString() gibi bir fonksiyon ya da çarpma (*) gibi bir işleç kullanman gerekir. Bir türün başka bir türe açık dönüşümü tür dönüştürme olarak da adlandırılır.
Kayan Sayıyı Tamsayıya Dönüştürme
Bir kayan sayıyı bir tamsayıya dönüştürmek, kaynak noktalı sayıyı bir tamsayıya nasıl dönüştüreceğini açıkça belirten bir fonksiyon gerektirir. Aşağıdaki fonksiyonların hepsi dönüştürmeyi gerçekleştirir ancak hepsi farklı şekilde çalışır. Belirli bir durumda hangisinin en iyi çalıştığına sen karar verebilirsin.
Bu örnekte, farklı fonksiyonlar dört adet kayan sayı değişmez değerini, bir başarısızlık bağlamı oluşturmak için or işlecini kullanarak tamsayı değerlerine dönüştürür. Ardından, set, değerleri tamsayı türündeki değişkenlere atar.
# The Int[] method has the <decides> effect,
# This means that we need to account for failure as it is a failable expression.
# This results in the following
# var WoodInt:int = failable expression or the value if it fails.
var WoodCollectedFloat:float = 10.5
var WoodInt:int = Int[WoodCollectedFloat] or 0
Print("Printing WoodInt Value (10): {WoodInt}")
# Similar to Int[], Floor[], Ceil[], and Round[] also have the <decides> effect
Bu örnekte if ifadesi bu başarısız olabilir fonksiyonlar için başarısızlık bağlamını oluşturur, set ise değerleri tamsayı türündeki değişkenlere atar.
var WoodCollected:int = 0
var StoneCollected:int = 0
var GoldCollected:int = 0
var FoodCollected:int = 0
if:
# This block is the condition of the if expression
# Which creates the failure context
# If any fail, the entire chain of execution is rolled back
# And the else branch, if it exists, is executed
Tamsayıyı Kayan Sayıya Dönüştürme
Çarpma işleci (*), çarpma işlemini gerçekleştirmeden önce tamsayıyı kayan noktalı bir sayıya dönüştürür. Bir tamsayıyı bir kayan sayı veri türüne dönüştürmenin yolu, tamsayıyı 1,0 ile çarpmaktır.
Bu kod, int değişkeni StartingPositionX’i çarpma yoluyla bir float’a dönüştürür, böylece bir vector3 değişkeninin bildiriminde kullanılabilir. vector3 veri türü, X, Y ve Z alanlarında float türünde değerler gerektirir.
# Required for the vector3 type
using { /UnrealEngine.com/Temporary/SpatialMath}
var StartingPositionX:int = 960
# CurrentX = 960.0
var CurrentX:float = StartingPositionX * 1.0
var CurrentPosition:vector3 = vector3{X := CurrentX, Y := 0.0, Z := 0.0}
Print("CurrentX: {CurrentX}")Dizeye Dönüştürme
Bir ToString() fonksiyonu veya ToString() fonksiyonunu çağıran bir dize interpolasyonu kullanarak birden fazla veri türünü string değerine dönüştürebilirsin. Şu anda Verse’te aşağıdaki türler, yerleşik ToString() fonksiyonlarına sahiptir.
kayan sayı
tamsayı
[]char
char
vector2
vector3
rotation
Bu örnekte değişkenlerin, dize interpolasyonu ve ToString() fonksiyonlarıyla bir dizeye dönüştürüldüğünü görebilirsin. Her iki yöntem de aynı sonucu verir çünkü dize interpolasyonu, ToString() fonksiyonunu çağırır.
var WoodCollected:int = 100
# Convert using string interpolation
Print("WoodCollected: { WoodCollected }")
# or ToString() function
Print("WoodCollected: " + ToString(WoodCollected))
var InitialDistance:float = 3.625
# Convert using string interpolation
Print("InitialDistance: { InitialDistance }")
# or ToString() function
Özel Veri Türünü Dizeye Dönüştürme
Veri türü için ToString(custom_type) fonksiyonu uygulanarak özel veri türleri de dizelere dönüştürülebilir. Bir ToString(custom_type) fonksiyonu mevcutsa dize interpolasyonu, veri türlerini dizelere otomatik olarak dönüştürmek için bu fonksiyonu kullanır.
Meyvelerin enum veri türü için özel bir ToString() fonksiyonunun örneğini aşağıda görebilirsin.
fruit := enum:
Apple
Banana
Strawberry
ToString(Fruit: fruit):string =
case(Fruit):
fruit.Apple => "Apple"
fruit.Banana => "Banana"
fruit.Strawberry => "Strawberry"
Özel bir sınıf için özel bir ToString() fonksiyonunun örneğini aşağıda görebilirsin. ToString() fonksiyonunun waypoint sınıfı dışında tanımlandığına dikkat et. SetDestination() fonksiyonunda Destination dize interpolasyonu, özel ToString() fonksiyonunu çağırır.
# Custom class with constructor and a ToString() function
waypoint := class():
DisplayName:string
Position:vector3 = vector3{}
MakeWaypoint<constructor>(Name:string, X:float, Y:float, Z:float) := waypoint:
DisplayName := Name
Position := vector3{X := X, Y := Y, Z := Z}
ToString(Waypoint: waypoint):string =
Bir Obje Referansını Farklı Bir Türe Dönüştürme
Aşağıdaki sözdizimini kullanarak obje referanslarını farklı sınıflara veya arayüzlere açıkça dönüştürebilirsin (tür dönüştürme):
if (NewObjectReference := object_type_to_cast_to[ObjectReference]) {}object_type_to_cast_to ifadesi, referansı dönüştürmeye çalıştığın sınıfı veya arayüzü temsil eder. Bu başarısız olabilir bir ifadedir çünkü obje belirtilen türe dönüştürülemiyorsa tür dönüştürme başarısız olacaktır. Sınıf ile objenin türü, bir üst sınıfın türü veya objenin sınıfının uyguladığı bir arayüz eşleşmiyorsa obje referansını sınıfa dönüştürme girişimi başarısız olur.
Bu kod bir positionable arayüzü, positionable arayüzünden devralan bir shape soyut sınıfı ve triangle ile square şeklinde iki shape alt sınıfı tanımlar. Daha sonra square türünde MyShape adlı bir nesne oluşturur ve türünü diğer üç türe dönüştürmeyi dener. Sonuçların dökümü aşağıdaki gibidir.
| square Tür Dönüştürme Hedefi | Sonuç |
|---|---|
| başarılı olur çünkü |
| başarısız olur çünkü |
| başarılı olur çünkü |
# Class and interface definitions
positionable := interface() {}
shape := class<abstract>(positionable) {}
triangle := class(shape) {}
square := class(shape) {}
# Create a square object referenced using the superclass type shape
MyShape:shape = square{}
# This will succeed since MySquare is a square object
Son örnekte tür dönüştürme yöntemi de çalışır ancak gerekli değildir. Bu kod aynı sonucu verir:
MyDrawable:positionable = MyShapeTür Dönüştürme Kullanım Örnekleri
UEFN’de obje türü dönüştürmenin kullanıldığı durumların bir örneği, belirli bir türdeki aktörleri bulmak ve türe göre fonksiyonlar çağırmaktır. Bunun nasıl yapılacağını öğrenmek için Oynanış Etiketleri İçinde Oynanış Etiketi Olan Aktörleri Bulmak bölümünü incele.