Verse’te belirleyiciler, semantik ile ilgili davranışı açıklar ve tanımlayıcılara ve belirli anahtar sözcüklere eklenebilir. Belirleyici sözdizimi <
ile >
kullanarak anahtar sözcüğü bunların arasına koyar, örneğin: IsPuzzleSolved()<decides><transacts> : void
.
Verse’te öznitelikler, Verse dilinin dışında kullanılan davranışı açıklar (Verse semantiğini açıklayan belirleyicilerin aksine). Öznitelik sözdizimi; @
ve ardından anahtar sözcük kullanır, örneğin @editable
.
Aşağıdaki bölümlerde Verse’teki tüm belirleyiciler ve özniteliklerle birlikte bunları ne zaman kullanabileceğin açıklanıyor.
Efekt Belirleyiciler
Verse’te efektler bir işlevin sergilemesine izin verilen davranış kategorilerini belirtir. Efekt belirleyicileri şunlara ekleyebilirsin:
- Bir işlev tanımındaki addan sonra
()
:name()<specifier> : type = codeblock
. class
anahtar sözcüğü:name := class<specifier>():
.
Efekt belirleyiciler iki kategoriye ayrılır:
- Özel: Bir fonksiyona veya
class
anahtar sözcüğüne özel efekt belirleyicilerden yalnızca birini ekleyebilirsin veya hiçbirini ekleyemezsin. Özel bir efekt belirleyici eklenmezse varsayılan efektno_rollback
şeklinde olur. - Katkı: Bir fonksiyona veya
class
anahtar sözcüğüne katkı efekti belirleyicilerin tümünü veya bazılarını ekleyebilirsin ya da hiçbirini ekleyemezsin.
Büyütmek için görsele tıkla.
Örnek | Efekt |
---|---|
|
no_rollback: Özel bir efekt belirtilmediğinde varsayılan efekttir. |
Özel Efektler | |
|
transacts: Bu efekt, fonksiyon tarafından gerçekleştirilen herhangi bir eylemin geri alınabileceğini belirtir. Dönüşebilir bir değişkenin ( |
|
varies: Bu efekt, fonksiyona eklenen aynı girdiğinin her zaman aynı çıktıyı üretemeyebileceğini belirtir. |
|
computes: Bu efekt, fonksiyonun yan efektlerinin olmamasını gerektirir ve tamamlanması garanti edilemez. Aynı bağımsız değişkenlerle birlikte sağlandığında fonksiyonun aynı sonucu vermesine yönelik denetlenmemiş bir gereklilik vardır. |
|
converges: Bu efekt, ilgili fonksiyonun yürütülmesinden kaynaklanan bir yan efekt olmamasının yanında fonksiyonun kesin olarak tamamlanmasını (sonsuz kadar yinelenmemesini) garanti eder. Bu efekt yalnızca |
Katkı Efektleri | |
|
decides: İşlevin başarısız olabileceğini ve bu fonksiyonu çağırmanın bir başarısız olabilir ifade olduğunu belirtir. |
|
suspends: İşlevin asenk. olduğunu belirtir. İşlev gövdesi için bir asenk. bağlamı oluşturur. |
Tüm durumlarda belirli bir efekte sahip bir fonksiyonu çağırmak için çağıranın da o efekte sahip olması gerekir.
Erişim Belirleyiciler
Erişim belirleyiciler bir üye ile neyin nasıl etkileşimde bulunabileceğini tanımlar. Erişim belirleyiciler aşağıdakilere uygulanabilir:
- Bir üye için tanımlayıcı:
name<specifier> : type = value
- Bir üye için
var
anahtar sözcüğü:var<specifier> name : type = value
|
Public (Genel): Tanımlayıcı genel erişime açıktır. Bu belirleyiciyi şuralarda kullanabilirsin:
|
|
Protected (Korumalı): Tanımlayıcıya yalnızca geçerli sınıf ve alt türlerden erişilebilir. Bu belirleyiciyi şuralarda kullanabilirsin:
|
|
Private (Özel): Tanımlayıcıya yalnızca geçerli bir üst kapsamda (modül, sınıf, yapı vb. olabilir) erişilebilir. Bu belirleyiciyi şuralarda kullanabilirsin:
|
|
Internal (Modül içi): Tanımlayıcıya yalnızca geçerli bir üst kapsam olan modülde erişilebilir. Bu, varsayılan erişim seviyesidir. Bu belirleyiciyi şuralarda kullanabilirsin:
|
Sınıf Belirleyiciler
Sınıf belirleyiciler, sınıfların veya üyelerinin, bir sınıfın alt sınıfını oluşturup oluşturamayacağın gibi belirli özelliklerini tanımlar.
|
abstract (soyut): Bir sınıf veya sınıf yöntemi soyut belirleyiciye sahip olduğunda sınıfın bir örneğini oluşturamazsın. Soyut sınıflar, kısmi uygulamalı bir üst sınıf veya ortak bir arayüz olarak kullanılmaya yöneliktir. Bu anlayış, bir üst sınıfın örneklerine sahip olmanın mantıklı olmadığı ancak özellikleri ve davranışları benzer sınıflar arasında tekrar etmek istemediğin durumlar için faydalıdır. |
|
concrete (somut): Bir sınıf somut belirleyiciye sahip olduğunda sınıfı boş bir arketiple oluşturmak mümkündür. Bunun sonucunda sınıfın her alanı varsayılan bir değere sahip olmak zorundadır. Bir somut sınıfın her alt sınıfı örtük olarak somuttur. Bir somut sınıfın bir soyut sınıftan doğrudan devralabilmesi için her iki sınıfın da aynı modülde tanımlanmış olması gerekir. |
|
unique (benzersiz): Benzersiz belirleyici, bir sınıfı benzersiz bir sınıf yapmak için uygulanabilir. Verse, benzersiz bir sınıfın bir örneğini oluşturmak için ortaya çıkan örneğe benzersiz bir kimlik ayırır. Bu işlem, benzersiz sınıf örneklerinin, kimlikleri karşılaştırılarak eşitlik açısından karşılaştırılmasına olanak tanır. Benzersiz belirleyicisi olmayan sınıfların böyle bir kimliği yoktur, dolayısıyla bunlar eşitlik açısından yalnızca alanlarının değerlerine göre karşılaştırılabilir. Buna göre, benzersiz sınıflar = ve <> işleçleriyle karşılaştırılabilir ve karşılaştırılabilir türün alt türleridir. |
|
final (son): Son belirleyiciyi yalnızca sınıflarda ve sınıfların üyelerinde kullanabilirsin:
|
Uygulama Belirleyiciler
Kod yazarken uygulama belirleyicileri kullanmak mümkün değildir ancak UEFN API’lerine baktığında bunları göreceksin.
|
native (yerel): Öğenin tanım ayrıntılarının C++ dilinde uygulandığını belirtir.
|
|
native_callable: Bir örnek yönetiminin hem yerel (C++ dilinde uygulanan) olduğunu hem de diğer C++ kodlarıyla çağrılabileceğini belirtir. Bu belirleyicinin bir örnek yönteminde kullanıldığını görebilirsin. Bu belirleyici alt sınıflara yayılmaz, dolayısıyla bu belirleyiciye sahip bir yöntemi geçersiz kılarken bunu bir tanıma eklemen gerekmez |
Öznitelikler
Verse’te öznitelikler, Verse dilinin dışında kullanılan davranışı açıklar (Verse semantiğini açıklayan belirleyicilerin aksine). Öznitelikler, kod satırında tanımların önüne eklenebilir.
Öznitelik sözdizimi; @
ve ardından anahtar sözcük kullanır.
|
editable: Bu alanın doğrudan UEFN’den değiştirilebilen kullanıma sunulmuş bir özellik olduğunu, bu nedenle değerini değiştirmek için Verse kodunu değiştirmenin gerekli olmadığını belirtir. Daha ayrıntılı bilgiyi Cihaz Özelliklerini Kişiselleştirme bölümünde bulabilirsin. |
|
doc: Sınıflarda ve işlevlerde bulabileceğin (ancak işlev parametrelerinde bulamayacağın) bir genel not alanı. Tanımladığı öğenin ne yaptığı veya nasıl kullanılacağı konusunda faydalı bilgiler içerir ve Verse API Başvurusu’nda o öğenin sayfasını doldurmak için kullanılır. |