Hata, Verse’teki kontrol akışıdır.
Bir programın akışını değiştirmek için true ve false Boole değerlerini kullanan diğer programlama dillerinin aksine, Verse başarılı veya başarısız olabilen ifadeler kullanır. Bu ifadeler başarısız olabilir ifadeler olarak adlandırılır ve yalnızca bir başarısızlık bağlamında yürütülebilir.
Kontrol akışı için hata kullanımı, işin tekrarlanması gerekmediği ve ince hatalardan kaçınabileceğin anlamına gelir.
Örneğin, diğer dillerde, bir dizi için bir dizinin geçerli olup olmadığını, o dizindeki dizi öğesine erişmeden önce kontrol etmen gerekir; bu da diğer dillerde yaygın bir hata nedenidir.
Verse'te bunu önlemek için doğrulama ve erişim birleştirilir.
Örneğin:
if (Element := MyArray[Index]):
Log(Element)
Başarısız Olabilir İfadeler
Başarısız olabilir bir ifade, başarılı olup bir değer üretebilen veya başarısız olup hiçbir değer döndüremeyen bir ifadedir. Başarısız olabilir ifadelere örnek olarak, geçersiz bir dizin başarısız olacağından bir dizi içine dizinleme ve iki değerin karşılaştırılması gibi işleç kullanımı verilebilir.
Yazdığın kod varsayılan olarak başarısız değildir. Örneğin, başarısız olabilecek bir fonksiyon yazmak için, fonksiyon tanımına <decides>
efekt belirticisini eklemen gerekir. Şu anda <decides>
kullanırken <transacts>
eklemek de gereklidir.
Başarısız olan ifadelerin tam listesi için Verse’teki İfadeler listesine bakabilirsin.
Başarısızlık Bağlamı
Başarısızlık bağlamı, başarısız olabilir ifadelerin yürütülmesine izin verilen bir bağlamdır. Bağlam, ifadenin başarısız olması durumunda ne olacağını tanımlar. Bir başarısızlık bağlamındaki herhangi bir başarısızlık tüm bağlamın başarısız olmasına neden olur.
Başarısızlık bağlamı, iç içe ifadelerin bir block
ifadesindeki fonksiyon bağımsız değişkenleri veya ifadeler gibi başarısızlık ifadeleri olmasına izin verir.
Verse’te başarısızlık bağlamlarının faydalı bir yönü, eylemleri işlemeden deneyebileceğin anlamına gelen bir tür kurgusal yürütme olmalarıdır. Bir ifade başarılı olduğunda ifadenin efektleri işlenir. Buna örnek olarak bir değişkenin değerinin değiştirilmesi gösterilebilir. Öte yandan ifade başarısız olursa ifadenin efektleri, sanki ifade hiç gerçekleşmemiş gibi geri alınır.
Bu yöntemle, değişiklikleri biriktiren bir dizi eylem yürütebilirsin ancak bu eylemler herhangi bir yerde başarısız olursa geri alınacaktır.
Bunun işe yaraması için başarısızlık bağlamında çağrılan tüm fonksiyonlar <transacts>
efekt belirleyicisine sahip olmalıdır; aksi takdirde derleyici hata mesajı verir.
Kullanıcı tanımlı fonksiyonlar varsayılan olarak transacts
efektine sahip değildir. Tanımlarına açık bir <transacts>
belirleyicisi eklenmelidir. Bazı yerel fonksiyonlar da transacts
efektine sahip değildir ve başarısızlık bağlamlarında çağrılamazlar.
transacts
içermeyen yerel fonksiyonlara örnek olarak BeginSound()
metoduna sahip bir audio_component verilebilir. Ses başlatılmışsa, durdurulmuş olsa bile fark edilmiş olabilir.
Aşağıdaki liste Verse’teki tüm hata bağlamlarını içerir:
-
if
ifadelerindeki koşul.if (test-arg-block) { … }
-
for
ifadelerindeki yineleme ifadeleri ve filtre ifadeleri.for
un her yineleme için bir başarısızlık bağlamı oluşturması açısından özel olduğunu unutma. Yinelemeler iç içe geçmişse, başarısızlık bağlamları da iç içe geçmiş olacaktır. Bir ifade başarısız olduğunda, en içteki başarısızlık bağlamı iptal edilir ve varsa dıştaki yineleme bir sonraki yinelemeyle devam eder.for (Item : Collection, test-arg-block) { … }
-
<decides>
efekt belirleyicisine sahip fonksiyon veya metodun gövdesi.IsEqual()<decides><transacts> : void = { … }
-
not
işlecinin işleneni.not expression
-
or
işlecinin sol işleneni.expression1 or expression2
-
option
türüne sahip bir değişken başlatma.option{expression}