Başarısızlık korkutucu olabilir ancak programlamanın önemli bir parçasıdır. Başarısızlıklardan yararlanarak hataları nasıl ayıklayacağını öğrenebilir, bir programın sınırlarını bulabilir veya neyi yapmaman gerektiğini hızlıca görebilirsin!
Başarısız Olmakta Bir Sorun Yok
Verse’te başarısızlık özel bir anlam taşır. Her zaman bir şeylerin çalışmadığı anlamına gelmez. Programının ne yaptığını kontrol etmenin bir yoludur.
4. Ders'te bir evet/hayır sorusu sormak için kod yazabileceğini öğrendiğini hatırlıyor musun?
var Tired: logic = false
var WhatToWatch: string = “nothing”
if (Tired?):
set WhatToWatch = “your eyelids”
else:
set WhatToWatch = “cartoons”
Print(“You should watch {WhatToWatch}”)
# Çizgi film izlemelisin
Soruyu soran kod bir başarısız olabilir ifade olarak yazılır. Yukarıdaki örnekte Tired? bir başarısız olabilir ifadedir.
Başarısız olabilir ifadeler, programının birlikte çalışmasını engelleyebilecek hatalardan kaçınmak için kullanılır. Örneğin, bir sayıyı sıfıra bölmenin imkansız olduğunu biliyorsundur. Kodunda bu işlemi denediysen çökebilir! Ancak aşağıdaki Verse kodu sorunsuzca çalışır.
if (5/0):
Print("Hop!")
else:
Print("Öyle yapamazsın!")
Bu tür hatalardan kaçınmak için başarısız olabilir ifadeleri Verse’te bir başarısızlık bağlamında yazman gerekir. Başarısızlık bağlamları, başarısız olabilir ifadelere güvenli bir şekilde başarısız olabilecekleri bir yer sağlar. Yukarıdaki örnekte 5/0 başarısız olabilir ifade, if() ise başarısızlık bağlamıdır. Bu iki Verse kavramı hakkında daha fazla bilgi edinmek için okumaya devam et.
Başarısız Olabilir İfadeler
Verse’te başarısız olabilir ifadeler yazmanın birçok yolu vardır. Bir ifade evet/hayır sorusu soruyorsa büyük olasılıkla başarısız olabilir özellikteki bir ifadedir.
Başarısız olabilir ifadelerin sorduğu bazı soru türleri şunlardır:
- Bu iki değişken birbirinden büyük mü, küçük mü yoksa birbirine eşit mi?
- Bu değişken
trueolarak mı ayarlanmış? - Bu değişken bir değere ayarlanmış mı?
- Bu ifade bir hataya neden oluyor mu?
Bu sorulardan herhangi birinin yanıtı evet ise ifade başarılı olur. Yanıt hayır ise ifade başarısız olur. Bir başarı veya başarısızlıktan sonra ne olacağı, kodunu nasıl yazdığına bağlı olarak değişir.
Karşılaştırma İfadeleri
< (küçüktür), > (büyüktür) veya <> (eşit değil) gibi işleçler kullanan karşılaştırma ifadeleri, başarısız olabilir ifadelerdir. Aşağıdaki örnekte 5 < 4 başarısız olacak bir başarısız olabilir ifadedir:
if (5 < 4):
Print(“Bu asla yazdırılmayacak.”)
5 < 4 ifadesi “5 sayısı 4'ten küçük müdür?” diye sormak gibidir. Yanıt hayır olduğu için ifade başarısız olur ve kod bloğu (if ifadesinin altında girintili yazılmıştır) çalışmaz.
Şimdi MousetrapsSet <> MiceCaught başarısız olabilir ifadesinin örneğine bakalım. İfade “MousetrapsSet ve MiceCaught değerleri eşit değil mi?” diye soruyor.
MousetrapsSet := 3
MiceCaught := 0
if (MousetrapsSet<>MiceCaught):
Print(“Daha çok peynir gerekli!”)
Bu kez sorunun yanıtı evettir çünkü MousetrapsSet değeri 3, MiceCaught değeri ise 0'dır. Bu nedenle ifade başarılı olur ve kod bloğu çalışır.
Karar İfadeleri
and, or ve not gibi işleçler kullanan karar ifadeleri, başarısız olabilir özellikteki ifadelerdir. Aşağıdaki örnekte MousetrapsForSale > 0 ve Coins >= MousetrapCost ifadesi, başarılı olacak bir başarısız olabilir ifadedir çünkü MousetrapsForSale değeri 5 (0’dan büyük), Coins değeri 30 ve MousetrapCost değeri 20’dir (30 sayısı 20’den büyüktür). İfadelerin her ikisi de ayrı ayrı başarılı olduğu için ifadenin tamamı başarılı olur.
MousetrapsForSale := 5
MousetrapCost := 20
Coins := 30
if (MousetrapsForSale > 0 and Coins >= MousetrapCost):
Print(“Fare kapanı satın alabilirsin.”)
Sorgu İfadeleri
Sorgu ifadeleri de başarısız olabilir ifadelerdir. Belirli değerleri kontrol etmek için ? işlecini kullanırlar (örneğin bir logic değerinin true olup olmadığını kontrol etmek için). Aşağıdaki örnekte MousetrapStoreOpen?, başarısız olacak bir başarısız olabilir ifadedir çünkü MousetrapStoreOpen değeri false şeklindedir.
var MousetrapStoreOpen : logic = false
if (MousetrapStoreOpen?):
Print(“İçeri gelsene!”)
Başarısızlık Bağlamları
Yukarıdaki bütün kod örneklerinde if ifadesi () içine alınmış başarısız olabilir ifadelerin başarısızlık bağlamıydı. Başarısızlık bağlamları, bir başarısızlık durumunda ne olacağını belirledikleri için başarısız olabilir ifadelere güvenli bir şekilde başarısız olabilecekleri bir yer sağlarlar.
Bir if ifadesi başarısız olursa if kod bloğunun içindeki kodun çalışmayacağını önceki bir derste öğrenmiştin.
if bir başarısızlık bağlamı oluşturduğu için bu kod bloğuna dilediğin sayıda başarısız olabilir ifade ekleyebilirsin. Eklediğin ifadelerin herhangi biri başarısız olursa kod bloğunda daha önce bulunan ifadeler çıkarılır veya geri alınır.
if ifadelerini () kullanmadan yazmanın başka bir yolu da vardır. Çok sayıda ifade yazman gerekiyorsa bu yol daha kullanışlıdır. Bir örneğini aşağıda görebilirsin:
MousetrapsSet:int = 5
var MiceCaught:int = 0
var BreakTime:logic = false
if:
MousetrapsSet > 0
set BreakTime = true
MiceCaught > 0
if (BreakTime?):
Print("Bir mola ver!")
else:
Print("Birkaç fare yakala!")
Bir başarısızlık bağlamında yer alan tüm ifadelerin başarısız olabilir özellikte olması gerekmez ancak en az birinin bu özeliği taşıması gerekir. Yukarıdaki örnekte set BreakTime = true başarısız olabilir bir ifade değilken diğer ifadeler öyledir.
Yukarıdaki kodda if altındaki her ifade, başarısızlık bağlamı içindedir. Üç ifadenin tamamı yürütülür.
MousetrapsSet > 0başarılı olur.set BreakTime = trueifadesi yürütülür. Başarısız olabilir bir ifade olmadığından başarısızlık kontrolü yapılmaz.- Buna karşılık
MiceCaught > 0başarısız olur.
Bir başarısızlık olduğundan if kod bloğu içindeki set BreakTime = true dahil olmak üzere her ifade geri alınır. Kod hiç çalışmamış gibi görünür. Bu kodu çalıştırırsan “Birkaç fare yakala!” yazdırılır.
Programlama yaparken birçok kodun yalnızca diğer kod başarıyla çalışırsa çalışacağını görürsün. Bu da başarısızlık bağlamlarının kullanışlı olmasının bir diğer nedenidir. Bağımlı kodu başarısızlık bağlamları halinde gruplandırırsan bazı yaygın hataları önleyebilirsin. 4. Derste sinemaya gidip gitmeyeceğine karar vermek için kullandığın kodu hatırlıyor musun? Artık arkadaşlarınla gitmeye karar verdiğine göre onlara bilet, içecek ve atıştırmalıklar alman gerekiyor!
var Drinks:int = 4
var Snacks:int = 4
var Tickets:int = 3
var FriendsAvailable:int = 4
if:
Drinks >= FriendsAvailable
set Drinks -= FriendsAvailable
Snacks >= FriendsAvailable
set Snacks -= FriendsAvailable
Tickets >= FriendsAvailable
set Tickets -= FriendsAvailable
Print("Kalan İçki: { Drinks }")
Print("Kalan Atıştırmalık: { Snacks }")
Print("Kalan Bilet: { Tickets }")
-= işleci, çıkarma ve atama fonksiyonlarını birleştirmeye yönelik bir kısayoldur. Yukarıdaki örnekte set Tickets -= FriendsAvailable değeri, set Tickets = Tickets - FriendsAvailable değerine eşittir. Bu aynı zamanda toplama (+=), çarpma (*=) ve bölme (/=) ile de çalışır.
Mevcut arkadaşların için yeterli sayıda içeceğin ve atıştırmalığın var ama yeterli biletin yok. Yani filmi bütün arkadaşlarınla birlikte izleyemezsin. Bu durumu çözmek için bir kod yazabilirsin ancak büyük olasılıkla içeceklerini ve atıştırmalıklarını vermek istemezsin.
Neyse ki Tickets >= FriendsAvailable ifadesi çalıştığında başarısız olacak ve if bloğundaki kod geri alınacak. Yani Drinks ve Snacks değişkenlerinin her ikisi de 4 değerine geri dönecek.
Özet
- Verse’te başarısızlık, programını kontrol etmenin bir yoludur.
- Başarısızlık ifadeleri başarılı veya başarısız olabilir ve bir başarısızlık bağlamında yazılmalıdır. Bir başarı veya başarısızlıktan sonra ne olacağı, kodunun nasıl yazıldığına bağlı olarak değişir.
- Başarısızlık bağlamları, başarısızlık ifadelerinin güvenli bir şekilde başarısız olabilecekleri bir yer sağlar. Bir başarısızlık bağlamındaki herhangi bir hata, söz konusu bağlamdaki tüm kodların hiç çalışmamış gibi geri alınmasına neden olur.