Konu Anlatımı
Hata Yakalama ve Ayıklama
Bir form uygulaması hazırlarken kodun hatasız çalıştığı düşünülür; oysa kullanıcı alanı boş bırakabilir, sayı yerine harf yazabilir, veritabanı bağlantısı kopabilir. Ortaya çıkan bu aksaklıklar hata olarak adlandırılır ve program bunu kendiliğinden durdurur. Programcının görevi hatayı beklemekten çok, hatayı yakalayıp yönetilebilir hâle getirmektir. Konumuzun ana fikri budur: hata, programı durduran bir son değil, tasarım gereği ele alınması gereken bir durumdur.
Diğer bir ayrım da ayıklama ile ilgilidir. Ayıklama, hatanın nerede oluştuğunu bulma çalışmasıdır; kod okunur, adım adım izlenir, değişkenlerin değerleri incelenir. Hata yakalama ise çalışma sırasında ortaya çıkan durumu yakalayıp yerinde çözüme bağlamaktır. Bu ikisi birbirinin yerine geçmez. Geliştirici önce ayıklamayla hatayı bulur, sonra yakalama yapısıyla aynı hatayı bir daha yaşandığında programı düşürmeyecek hâle getirir.
1. Ne Öğreneceğiz ve Ön Bilgi
Bu bölümde üç temel hata sınıfını tanıyacak, hata yakalama yapısının hangi parçalarından oluştuğunu inceleyecek ve bir form uygulamasında kullanıcıya anlaşılır bir mesaj gösterme sorumluluğunu ele alacağız. Ön bilgi olarak değişken kavramını, form üzerindeki girdi denetimlerini ve temel akış kontrol yapılarını bilmek yeterlidir.
- Sözdizimi hatası: kurala aykırı yazılmış bir ifadeden doğar, program çalışmaya başlamadan bulunur.
- Çalışma zamanı hatası: program çalışırken ortaya çıkar, örneğin sayı olmayan bir metin sayıya çevrilmeye çalışılırsa.
- Mantık hatası: program hatasız çalışır ama istediği sonucu üretmez; en zor bulunan türdür.
Bu ayrımın neden önemli olduğunu şöyle düşünebiliriz. Sözdizimi hatası denetim aşamasında yakalanır, çalışma zamanı hatası ancak ilgili satır çalışırken ortaya çıkar, mantık hatası ise hiçbir uyarı vermeden kendini belli etmez. Hata yakalama yapısı esas olarak çalışma zamanı hataları için tasarlanmıştır.
2. Temel Kavramlar ve Sınıflandırma
Çoğu programlama dilinde hata yakalama üç parçalı bir blokla kurulur: denenecek işlem yazılan bölüm, hata durumunda yapılacak iş ve isteğe bağlı son temizliği yapan bölüm. Buna yaygın adıyla denene-hata-yakala düzeni denir. Dilden dile blok adları değişebilir, ancak düzenin işleyiş mantığı her zaman aynıdır.
| Hata sınıfı | Ne zaman ortaya çıkar | Tipik belirti |
| Sözdizimi hatası | Program çalıştırılmadan önce | Eksik parantez, tanımsız değişken adı |
| Çalışma zamanı hatası | İlgili satır çalışırken | Sayıya çevrilemeyen metin, sıfıra bölme |
| Mantık hatası | Program bittikten sonra fark edilir | Sonuç beklenenden farklı çıkar |
Yakalanan hata bir hata nesnesi olarak gelir ve bu nesne genellikle hatanın açıklamasını taşıyan bir mesaj özelliği içerir. Bu mesaj geliştirici için değerlidir, ancak son kullanıcıya olduğu gibi gösterilmemelidir. Uzun bir yığın izi, dosya yolu veya iç değişken adları içeren teknik bir metin, sıradan bir kullanıcıyı korkutur ve programı bozuk gösterir.
- Kullanıcıdan gelen veri önce denetlenir, boş veya biçimi bozuk olan alanlar yakalanır.
- Veri işlenirken ortaya çıkabilecek hatalar denene-hata-yakala bloğuyla karşılanır.
- Yakalanan hata anlaşılır bir mesajla bildirilir, ayrıntılı bilgi günlüğe yazılır.
3. Basit Örnek ve Adım Adım Çözüm
Basit örneğimizde kullanıcı yaş alanına bir sayı yazacak, program bu değeri okuyup ilgili kaydı işleyecektir. Alan boş bırakılırsa ya da harf yazılırsa ortaya çalışma zamanı hatası çıkar. Çözümü adım adım kuruyoruz.
Adım 1: Yaş alanının boş olup olmadığını denetle ve boşsa işlemi sonlandır. Adım 2: Alandaki metni sayıya çevirmeyi dene; dönüşüm başarısızsa yakaladığın hatayı oku ve kullanıcıya anlaşılır bir uyarı göster. Adım 3: Sayı elde edildiyse işlemi sürdür. Adım 4: Hata olsa da yapılması gereken son işlem varsa onu da çalıştır ve programı düzgün kapat.
Yakalanan hata mesajını doğrudan ekrana yazdırmak yerine, mesajı okuyan bir yordam çağırmak daha temiz bir tasarımdır. Böylece aynı uyarı birden çok yerde aynı dille tekrar edilebilir.
4. İleri Örnek ve Saha Uygulaması
Saha uygulaması olarak bir öğrenci kayıt formunu düşünelim. Form, kimlik numarası, ad soyad ve doğum yılı alanlarını içerir. Kullanıcı kaydı tamamladığında program önce alanları tek tek denetler, sonra kaydı veri tabanına yazar. Bu senaryoda birden çok hata kaynağı vardır ve beklenen hatalar ile beklenmeyen hatalar ayrı ayrı ele alınmalıdır.
Beklenen hata, kullanıcı girdisiyle ilişkilidir: alan boştur, doğum yılı gelecekte bir tarihtir, kimlik numarası beklenen uzunlukta değildir. Bu hatalar için gösterilecek mesaj düz, sakin ve düzeltici olmalıdır. Beklenmeyen hata ise veri tabanı bağlantısının kesilmesi ya da diskin dolu olması gibi geliştiricinin önceden sayamadığı durumlardır. Burada mesaj genel tutulur, ayrıntılı teknik bilgi ise hata günlüğüne yazılır.
| Durum | Kullanıcıya gösterilen mesaj | Geliştiriciye kaydedilen bilgi |
| Alan boş | Lütfen alanı doldurun | Hangi alanın boş kaldığı |
| Biçim uyuşmuyor | Yalnızca rakam girin | Girilen değerin kayıt dışı gösterimi |
| Bağlantı kesildi | Kayıt şu anda yapılamıyor | Hata türü, zaman damgası, yığın izi |
Bu ayrımın faydası ölçülebilir: kullanıcı yalnızca kendisiyle ilgili bir bilgi alır, geliştirici ise hatayı yeniden üretebilecek kadar ayrıntıya kavuşur. Günlük tutulmayan bir projede, kullanıcıya yalnızca mesaj gösterildiğinde gerçekleşen her hata kayıp sayılır.
5. Karşılaştırma Tablosu ve Denetim
Bir form uygulamasını yayına almadan önce denetim yapılmalıdır. Denetimde yalnızca düzgün çalışan yol değil, kırılan yollar da denenmelidir. En sık kullanılan dört yöntem şunlardır.
| Denetim yöntemi | Neyi arar | Ne zaman yapılır |
| Girdi denetimi | Boş alan, hatalı biçim, fazla uzun metin | Kayıt düğmesine basıldığında |
| Hata yakalama | İşlem sırasında oluşan beklenmeyen durum | Veri tabanına yazma gibi adımlar çevresinde |
| Günlük tutma | Hatanın zamanı, türü ve kaynağı | Hata yakalandığı anda |
| Manuel sınama | Uç durumlar ve beklenmeyen girdiler | Sürümden önce |
Denetimde kendi hatamızı aramak gerekir. Yaygın bir hata, hata yakalama bloklarının hiç kullanılmaması ve ilk hatanın programı durdurmasına göz yumulmasıdır. Bir başka yaygın hata ise her hatanın aynı mesajla karşılanmasıdır; bu durumda kullanıcı neyi düzelteceğini bilemez. Doğru yaklaşım, hatayı yerine göre sınıflandırıp her sınıfa uygun bir yanıt vermektir.
6. Sık Yapılan Hatalar, Özet ve Kendini Dene
Sık yapılan ilk hata, hata yakalama bloklarının boş bırakılmasıdır. Yakalanan hata için hiçbir işlem yapılmadan geçilirse hata sessizce yutulmuş olur; kullanıcı sonucu beklerken program hiçbir şey yapmıyormuş gibi görünür. İkinci sık hata, teknik ayrıntıyı kullanıcıya olduğu gibi göstermektir. Üçüncü sık hata ise hata yakalamayı, program yazılmaya başlanmadan önce hiç planlamamaktır.
- Yakalanan hata için bir kayıt satırı yazılıyorsa bu kayıt düzenli olarak gözden geçirilmelidir.
- Denene-hata-yakala bloğunun içine yalnızca hata riski taşıyan işlemler konmalı, uzun ve riski düşük işlemler dışarıda bırakılmalıdır.
- Kullanıcıdan gelen her metin, işlenmeden önce biçim denetiminden geçmelidir.
- Hata mesajları dil açısından sade, teknik açıdan ayrıntılı olacak şekilde ikiye ayrılmalıdır.
Özetle hata yakalama, programın beklenmedik durumlarda da ayakta kalmasını sağlayan bir güvenlik ağıdır. Ayıklama bu ağın gözü gözü olmasa, hata nereden geldi? Sıralama bütünüyle doğru mudur? Sorularına cevap arar. Birlikte kullanıldıklarında program hem sağlam çalışır hem de geliştiricinin işini kolaylaştırır.
Kendini dene: Kayıt formunda yaş alanına harf yazdığında ne olur? Aynı hata ikinci kez oluştuğunda programın davranışı nasıl değişmelidir?