Verse, "Hello Verse" ve "Epic Games" gibi metinleri depolamak ve işlemek için tür olarak stringi kullanır. Verse’te bir dize; harfler, sayılar, noktalama işaretleri, boşluklar ve emoji’ler içerebilir. "" şeklinde karakter içermeyen bir dizeye boş dize denir.
Önceden tanımlanmış dize değerlerini koduna dize değişmez değerleri olarak dahil edebilirsin. Dize değişmez değeri, kodunda " “ şeklinde çift tırnak işaretleri ile çevrili bir karakter dizisidir.
Aşağıda, "Hello world" dize değişmez değeriyle başlatılan Merhaba adında bir dize değişkeninin nasıl oluşturulacağına dair bir örnek verilmiştir:
Hello : string = "Hello World"
Karakter Kodlaması
Karakter kodlaması, bir metin karakteri ile kod noktası adı verilen, bilgisayarın anlayabileceği veriler arasındaki eşleştirmedir.
Verse, farklı dillerde, platformlarda ve cihazlardaki karakterler için karşılaştırılabilir bir destek sağlamak amacıyla Unicode Consortium tarafından geliştirilen bir standart olan UTF-8 Unicode karakter kodlama düzenini kullanır.
Örneğin, "🐈" dizini içindeki bu emoji, emojinin unicode kod noktası olan "{0u1f408}" ile de temsil edilebilir. Unicode’da desteklenen karakterlerin ve bunlara karşılık gelen kod noktalarının tam listesi için unicode dokümantasyonu sayfasına bakabilirsin.
UTF-8 kod birimi, 8 bit (bir bayt) şeklindedir bayt)) uzunluğunda olup bir ila dört bayt uzunluğunda kod noktalarına sahip karakterleri kodlar. Daha düşük değerli kod noktaları, daha yüksek değerli kod noktalarına göre daha az bayt kullanır. Örneğin, "a" bir bayt ("{0c61}”) kullanırken, "á" iki bayt ("{0cC3}{0cA1}”) kullanır.
Dize İşlemleri
Dizeler birleştirme, karşılaştırma, dizin oluşturma, dizenin uzunluğunu alma ve dize ilişkilendirmesini destekler.
Birleştirme
Birleştirme, bir dizenin başka bir dizeye eklenmesidir. Dizeleri birleştirmek için + işlecini kullanabilirsin.
Örneğin, aşağıdaki kod, "...And the winner is: Player One!” dizesini içeren Announcement değişkeniyle sonuçlanır.
# Kazanan oyuncunun adı:
WinningPlayerName : string = "Oyuncu Bir"
# Kazananı duyuran bir mesaj oluştur.
Announcement : string = "...Ve kazanan: " + WinningPlayerName + "!"
Dize İlişkilendirmesi
Biz dizenin geçerli kapsamda tanımlanmış geçerli bir ToString() işlevi varsa o dizeye bir değer ekleyebilirsin.
Örneğin, aşağıdaki kod, "...And the winner is: Player One!” dizesini içeren Announcement değişkeniyle sonuçlanır.
# Kazanan oyuncunun adı:
WinningPlayerName : string = "Oyuncu Bir"
# Kazananı duyuran bir mesaj oluştur.
Announcement : string = "...Ve kazanan: {WinningPlayerName}!"
Karşılaştırma
İki dizenin eşit olup olmadığı, aynı karakterleri kullanıp kullanmadıklarına bağlıdır.
Verse’teki dizelerin karşılaştırılması, her karakterin kod noktalarının karşılaştırılmasıyla yapılır. İki dizenin karşılaştırılması büyük/küçük harfe duyarlıdır, çünkü büyük ve küçük harfli karakterler farklı kod noktalarına sahiptir.
İki dizenin eşit olup olmadığını test etmek için = başarısız olabilir işlecini, eşitsizliği test etmek içinse <> başarısız olabilir işlecini kullanabilirsin.
Unicode’da aynı karakteri temsil etmenin birden fazla yolu olabilir. Örneğin, "é", "{0u0049}" şeklindedir, ancak iki kod noktası da kullanabilirsin: "e" için ”{0u0065}” ve birleştirici vurgu olarak da "{0u0301}". Buna göre, her ikisi de "é" karakteri gibi görünen ancak farklı kod noktaları kullanan bu dizeleri karşılaştırırsan dizeler eşit olmayacaktır. "{0u0049}", "{0u0065}{0u0301}" ile aynı değildir.
Aşağıdaki örnek, oyuncunun bir macera/bulmaca oyununda ilerleme kaydetmek için doğru eşyayı kullanıp kullanmadığını kontrol edecektir:
# Bulmacada bir sonraki adımın kilidini açmak için gereken eşya:
ExpectedItemInternalName : string = "RedPotion"
# Oyuncunun seçtiği eşya:
SelectedItemInternalName : string = "BluePotion"
# Oyuncunun doğru eşyayı seçip seçmediğini kontrol et.
if (SelectedItemInternalName = ExpectedItemInternalName):
# Evet, doğru. Bulmacanın bir sonraki adıma geçebileceğini belirt.
return true
# Doğru değil. Bu eşyanın bulmacayı ilerletmediğini belirt.
return false
Uzunluk
Bir dizedeki UTF-8 kod birimlerinin sayısını dizedeki Length üyesine erişerek elde edebilirsin. Örneğin, "hey".Length 3'tür.
Bir dizenin uzunluğu, dizenin UTF-8 kod birimlerinde temsil edilebilmesi için gereken veri miktarını hesaba almaktadır. Örneğin, "héy".Length 4'tür, çünkü dize üç karakter içeriyor gibi görünse de é karakterinin temsil edilebilmesi için fazladan bir UTF-8 kod birimi gerekmektedir. Aşağıdaki kod, iki basamaklı bir "saniye" süreölçerini görüntülemektedir. Gerekirse görüntüyü başa eklenecek bir sıfır ile dolduracaktır.
# SecondsRemaining'in negatif olmadığı varsayılır
SecondsRemaining : int = 30
# int temsilini otomatik olarak bir dizeye dönüştür:
SecondsString:string = SecondsRemaining
# Süreölçer görüntüleme dizesini ayarla.
var Combined : string = "Time Remaining: "
# Dize çok uzunsa dizeyi, maksimum iki basamaklı değer 99 ile değiştir.
if (SecondsString.Length > 2):
# Saatte çok fazla zaman var! Dizeyi sabit kodlanmış maksimum bir değer şeklinde ayarla.
set Combined += "99"
else if (SecondsString.Length < 2):
# Görüntüyü başa eklenecek bir sıfır ile doldur.
set Combined += "0{SecondsString}"
else:
# Dize halihazırda tam uzunluktadır, bu yüzden ekle.
set Combined += SecondsString
Dizin
UTF-8 kod birimine dizenin belirli bir dizininden erişebilirsin. Bir dizedeki ilk UTF-8 kod biriminin dizini 0 olup sonraki her kod birimi dizini sayıca artar.
Örneğin, "cat"[0], ”c”, "cat”[1] ise "a"dır.
| Dizin | 0 | 1 | 2 |
| Karakter | "c" |
"a" |
"t" |
| Kod Birimi | "{0c63}" |
"{0c61}" |
"{0c74}" |
Bir dizenin birden fazla kod birimi tarafından temsil edilen karakterlere sahip olduğu durumlarda, her kod birimi için bir dizin olacaktır. Örneğin, "á", "{0cC3}{0cA1}" şeklinde iki UTF-8 kod birimi ile temsil edilir, dolayısıyla "cát"[1], ”{0cC3}”, "cát”[2] ise "{0cA1}" şeklindedir.
| Dizin | 0 | 1 | 2 | 3 |
| Karakter | "c" |
"á" |
"t" |
|
| Kod Birimi | "{0c63}" |
"{0cC3}" |
"{0cA1}" |
"{0c74}" |
Bir dizedeki son dizin, dizenin uzunluğundan bir eksiktir. Örneğin, "cat".Length 3, ”cat”teki ”t”ye dair dizin ise 2’dir.
Standart Kütüphane
Standart kütüphane, dizelerin oluşturulması ve kullanımına yardımcı olacak fonksiyonlar sağlar. Bu işlevlerle ilgili daha ayrıntılı bilgi için Verse API Başvurusu bölümüne bakabilirsin.
Karakterlerin Alternatif Gösterimleri
Bazı karakterler bir dizede kullanıldıklarında, bunların alternatif gösterimleri vardır. Örneğin, "{}", dize ilişkilendirmesi veya karakterlerin kod noktaları için kullanılabilir, ancak metinde kendileri {} ayraç karakterleri olarak da kullanılabilirler.
Bir dizede bir karakterin alternatif bir gösterimini kullanabilmek için, dizedeki karakterin başına "\” kaçış karakterini eklemelisin. Örneğin, "\{\}", metinde {} olarak işlenir, "\n” ise metinde yeni bir satır başlatır.
Uygulama Ayrıntıları
string türü, UTF-8 kod birimlerinin bir dizisi olan []charın tür diğer adıdır. Dize, bir dizi için bir tür diğer adı olduğundan dizilerle aynı davranışa sahiptir.
Karakterler için boyutlarına ve kod noktası formatlarına bağlı olarak iki ilkel tür vardır: char ve char32. Verse’te char ve char32nin tek fonksiyonu, karşılaştırma ve bunların değerlerine erişim şeklindedir.
| İlkel Tür | Tanım | Desteklenen Formatlar |
|---|---|---|
| char | 256 (0off) değerine kadar tek bir UTF-8 kod birimini (bir bayt) temsil eden bir primitif tür. |
0oXX biçimindeki kod birimleri. Örneğin, 0o52. |
| char32 | Bir Unicode kod noktasını temsil eden ilkel bir tür. | 0uXXXX biçimindeki kod noktaları. Örneğin, 0u0041. |
Değişmez değerleri de tek tırnak ile ifade edebilirsin. Tek tırnak içindeki dizenin ilkel türünün charmı yoksa char32mi olduğu, karakter için kullanılan UTF-8 kod birimlerine bağlıdır. Örneğin, 'e', char, 'é' ise char32dir.
Kalıcı Tür
Dize, karakter ve char32 değerleri kalıcıdır, yani bu değerleri hem modül kapsamına alınmış weak_map değişkenleriyle kullanabilir hem de değerlerini farklı oyun oturumları arasında devam ettirebilirsin. Verse’te kalıcılık hakkında daha ayrıntılı bilgi için Verse’te Kalıcı Veri Kullanımı bölümüne bakabilirsin.