Menu
CoddyTech

Hata Yönetimi Nedir?

Coddy'nin GDScript Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 66 / 78.

Bir program, bir hata nedeniyle ortasında durabilir. Bu kod, yalnızca üç öğesi olan bir dizinin 5 numaralı yuvasını ister:

var inventory := ["sword", "shield", "potion"]
var slot := 5
print(inventory[slot])
print("Done")

Godot, Out of bounds get index '5' hatasını bildirir ve işlev bu satırda durur; bu nedenle Done hiçbir zaman yazdırılmaz. Bu bir çalışma zamanı hatasıdır: kod geçerlidir, ancak çalışırken aldığı bir değer bir satırın yürütülmesini imkânsız hâle getirir.

En sık karşılaşacağınız çalışma zamanı hataları şunlardır:

  • count değeri 0 olduğunda 10 / count örneğinde olduğu gibi bir tam sayıyı sıfıra bölmek (% için de aynı durum geçerlidir)
  • player["mana"] örneğinde olduğu gibi köşeli parantezlerle mevcut olmayan bir anahtarı okumak
  • yukarıdaki inventory[5] örneğinde olduğu gibi dizi sınırlarının dışında bir indeks kullanmak

Python ve Java, bir hata oluştuktan sonra try ve except veya catch ile hatayı yakalayabilir. GDScript'te istisnalar ve try yoktur. GDScript'te hata yönetimi, başarısız olabilecek satırdan önce değerleri kontrol etmek ve bunun yerine ne yapılacağına karar vermek anlamına gelir:

if slot >= 0 and slot < inventory.size():
	print(inventory[slot])
else:
	print("Slot ", slot, " is empty")

Kontrol için her iki parça da gereklidir. -1 gibi negatif bir dizin hata değildir: dizinin sonundan okuma yapar; bu, bir yuva numarasının ifade ettiği şey değildir.

Hata, çağırdığın bir fonksiyonun içinde gerçekleştiğinde o fonksiyon durur ve 0 veya null gibi boş bir değer döndürür; çağıran kod da bu yanlış değerle devam eder. Bazı hatalar herhangi bir hata oluşturmadan yanlış bir değer verir: int("abc") sonucu 0 olur.

challenge icon

Görev

Kolay

inventory dizisinin dört yuvası vardır ve yuvalar 0'dan başlayarak numaralandırılır. Program bir satır girdi okur: bir yuva numarası (negatif olabilen bir tam sayı).

Yuva mevcutsa Slot , numarayı, : ve öğeyi yazdır. 2 girdisi için çıktı şöyledir:

Slot 2: potion

Aksi takdirde Slot , numarayı ve is empty yazdır. 7 girdisi için çıktı şöyledir:

Slot 7 is empty

Negatif bir sayı hiçbir zaman yuva numarası olamaz: -1 için Slot -1 is empty yazdır. Program hiçbir zaman bir hatayla durmamalıdır.

Kendin dene

extends Node

func _ready():
	var inventory := ["sword", "shield", "potion", "bow"]
	var slot := int(OS.read_string_from_stdin())

	# Yuvadaki öğeyi yazdır veya yuvanın boş olduğunu belirt
	pass
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi