Visual Studio C# Dersleri | Visual Studio Kurulumu | C# Programlama Dersleri
Giriş-Çıkış İşlemleri Hata Mesajları
Hazırlayacağımız programın en önemli özelliklerinden biri de stabil çalışması olmalıdır. Stabil çalışması programımızın hatalara karşı ne kadar hazırlıklı ve kullanıcıya verdiği geri dönütle eş değerdir. Programımızın çalışması sırasında oluşabilecek hatalar genellikle kullanıcı girişlerinden kaynaklanır. Bu yüzden kullanıcı girişlerini kontol altına alarak çalışma zamanında oluşabilecek hataları en aza indirmek ise biz programcıların görevidir.
Önce hatalar oluştuğunda programın nasıl sonlandığını görelim daha sonra bunun için bir çözüm arayalım.
static void Main(string[] args) {
int x; Console.Write("Bir Sayıyı Giriniz: ");
x = Convert.ToInt16(Console.ReadLine());
Console.ReadKey(); }
Programımızı çalıştıralım ve sayı yerine string bir ifade girelim.
Programda istenilen sayı yerine ‘string’ bir ifade girdiğimiz zaman ekran çıktısı aşağıdaki gibi olacaktır. ‘String’ ifade ‘int’ tipine çevrilmede zorlanılacağından program duracaktır. Giriş dizesinin doğru olmadığına dair bir hata verecektir (Input string was not in a corrent format.) .
static void Main(string[] args) {
int x, y;
Console.Write("1. Sayıyı Giriniz: ");
x = Convert.ToInt16(Console.ReadLine());
Console.Write("2. Sayıyı Giriniz: ");
y = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("{0} / {1} = {2}", x, y, x / y);
Console.ReadKey(); }
Programımızı çalıştıralım ve aşağıdaki gibi değerleri girelim.
Girilen sayılardan biri sıfır olduğu zaman programımız sıfıra bölme hatasıyla karşılaşacağından dolayı duracaktır (Attempted to divide by zero) .
Yukardaki kodlarda da görüldüğü gibi program esnasında kullanıcılar tarafından yapılan hatalı girişler programın hatayla karşılaşmasına ve durmasına sebep olmaktadır. Biz bu hataları program içinde nasıl yakalarız ve kullanıcıya hata hakkında nasıl mesaj veririz buna bakalım.
.Net programcılıkta biz bu tür hatalara istisnalar(Exception) diyoruz. İstisnalar, programımızın çalışma zamanında yani program çalışırken ortaya çıkan olağan dışı durumlardır. .NET ortamında her şey gibi istisnalar da sınıflar kullanılarak oluşturulmakta ve tüm istisnalar temel System.Exception nesnesinden türetilmektedir.
İstisnaları program esnasında yakalamak ve kullanıcıya hata mesajını vermek için try{} catch{} finally{} bloklarını kullanıyoruz.
try{} bloku: İstisnanın çıkması muhtemel kodların yazıldığı bloktur.
catch{} bloku: Oluşan istisnanın yakalandığı ve kullanıcıya sunulduğu bloktur.
finally{} bloku: Try bloku içinde hata olsa da olmasa da çalışmasını istediğimiz kadoların yazıldığı bloktur. Finally bloğu genellikle bazı kaynakları serbest bırakmak için kullanılır. Kullanılması isteğe bağlı bir bloktur. En sık kullanıldığı yerler açık olan veri tabanı bağlantılarının program kırılsa da kırılmasa da kapatılması durumlarıdır.
static void Main(string[] args) {
int x, y;
Console.Write("1. Sayıyı Giriniz: ");
x = Convert.ToInt16(Console.ReadLine());
Console.Write("2. Sayıyı Giriniz: ");
y = Convert.ToInt16(Console.ReadLine());
try {
Console.WriteLine("{0} / {1} = {2}", x, y, x / y);
}
catch (Exception e) {
Console.WriteLine("Hata Oluştu : {0}", e);
}
finally {
Console.WriteLine("İyi Günler");
}
Console.ReadKey();
}
Programımızı çalıştırıp aşağıdaki gibi değerleri girdiğimiz zaman herhangi bir hatayla karşılaşılmadığından istediğimiz sonucu üretecektir.
Fakat prgoramımıza aşağıdaki değerleri girdiğimiz zaman hatayla karşılaşılacak ve programımız olduğu yerde durup catch{} blokuna atlayacak ve buradan çalışmaya devam edecektir.
Dikkat ederseniz her iki durumda da finally bloku içine yazdığmız kodlar çalıştırılmaktadır.
static void Main(string[] args) {
byte x ;
try {
Console.Write("0-255 Arasında Bir Sayıyı Giriniz: ");
x = Convert.ToByte(Console.ReadLine());
Console.WriteLine("Doğru Değer Girdiniz");
}
catch (Exception e) {
Console.WriteLine("Yanlış Değer Girdiniz");
Console.WriteLine("Hata Oluştu : {0}", e);
}
finally {
Console.WriteLine("İyi Günler");
}
Console.ReadKey(); }
Eğer bizden istenildiği gibi 0-255 arası bir değer girersek programımız herhengi bir hatayla karşılaşmayacağı için try bloku içindeki tüm kodlar icra edilip finally bloğuna atlar ve çalışmasına ordan devam eder. Yukardaki ekran çıktısında görüldüğü gibi
Fakat istenilen değer dışında bir değer girdiğimiz zaman program hatayla karşılaşacağından hatanın oluştuğu satırda program durdurulur ve catch blokuna atlanır ve çalışmasına ordan devam eder. Yukardaki ekran çıktısında görüldüğü üzere hata x = Convert.ToByte(Console.ReadLine()); satırında oluştuğundan bir sonraki satır icra edilmeden catch blokuna atlanmış ve program buradan devam etmiştir.