Hata Yakalama

Bizler, kod içerisinde oluşan bir hatayı kullanıcıya olduğu gibi gösteremeyiz. Kullanıcı ne olduğunu anlamayacaktır. Hatta siber korsanlar bu hata mesajı üzerinden birçok saldırı vektörü de gerçekleştirebilir. Örnek verelim.

Yukarıda ne olduğunu anlamanıza hiç gerek yok. Bilmeniz gereken şey bir aracı yanlış bir şekilde çalıştırdım ve bir hata ile karşılaştım. Normal bir kullanıcı burada ne yazdığını çok büyük ihtimalle anlamayacaktır. Ayrıca siber korsanlar hakkında dediklerimi de unutmayın. Bu yüzden, kullanıcı bir hata yaptığında biz, bu hata mesajlarını göstermek yerine kullanıcıyı, yaptığı yanlışı anlayabileceği bir dil ile uyarmamız gerekir. İşte, bu sebepten ötürü programlama dillerinde 'hata yakalama' diye bir unsurumuz vardır.

Şimdi, gerçek hayattan bir örnek görelim ardından Go'da hata yakalamayı öğrenelim.

Yukarıdaki kodun ne yaptığını bilmenize veya Python bilmenize hiç gerek yok. Bilmeniz gereken tek şey ben, bu program çalışırken bu programı 'Ctrl + C' kombinasyonu ile durdurdum. Normal şartlarda bunu yapmak 'KeyboardInterrupt' hatasını döndürür. Sonuç olarak bu bir hata mesajıdır ve kullanıcı bundan hiçbir şey anlamayacaktır.

Üstteki kırmızı kutuya bakın. Oraya, bir hata yakalama kodu girdim ve Python'a dedim ki: "Eğer kullanıcı, KeyboardInterrupt" hatasını verecek bir işlem yaparsa herhangi bir şey yapma (pass) ama hata mesajını da gösterme." Şimdi de aşağıdaki kırmızı kutuya bakın. Ben yine 'Ctrl + C' kullandım ama herhangi bir hata mesajı almadım. İşte hata yakalamanın amacı tam olarak budur. 

Hata yakalamanın mantığını anladıktan sonra şimdi Go'ya dönelim.

Artık yukarıdaki kodu okuyabilecek yetkinliktesiniz ama ben yine de kodun ne yaptığını kısaca söyleyeceğim. Bu kod kullanıcıdan, kullanıcı adı ve parola istiyor. Eğer kullanıcı adı 'CyberWorm' ise ve parola '123456' ise giriş başarılı olsun; değilse uyarı mesajı verilsin; eğer 3 yanlış deneme yapılırsa da hesap kısıtlansın istiyoruz.

Şimdi, bu kod aslında biraz karmaşık ve değişik. Bizim amacımız kodu en temiz haliyle yazmak olmalıdır. Bu yüzden bu hata veya uyarı mesajlarını da sade bir şekilde yazmamız gerekiyor.

Bunun için yukarıda gördüğünüz gibi çalışmamıza 'errors' modülünü eklememiz gerekiyor.

Daha sonra 'login' isminde bir fonksiyon tanımlıyoruz ve bu fonksiyona 'username' yani kullanıcı adı ve 'password' yani parola adında iki parametre veriyoruz. Bu parametrelerin değerleri string olacaktır. Dolayısıyla yanlarına 'string' kelimesini de ekliyoruz. 

Bunu yaptıktan sonra ilk parantezin içinden çıkıp yeni bir parantez daha açıyoruz ve oraya, 'return' kullanacağımız için 'return'ün döndüreceği veri tipini 'string' şeklinde yazıyoruz. Onun hemen yanına da 'error' parametresini veriyoruz; bunu, bir veri tipi olarak düşünebilirsiniz. return kullanacağımız zaman bunu fonksiyonun başında nasıl belirtiyorsak, hata yakalamak istediğimizde de bunu fonksiyona belirtmemiz gerekir. Bu belirtme işlemini de bu şekilde yapıyoruz. Son olarak süslü parantezlerimizi açıyoruz ve içerisine giriyoruz.

Bunu yaptıktan sonra for döngümüzü kurup kullanıcıdan kullanıcı adını ve parolasını istiyoruz. Buraya kadar neredeyse her şey normal.

Onları yaptıktan sonra yapmamız gereken şey, kullanıcı adı ve parola üzerinde hakimiyet kurup onları kontrol etmek olmalıdır.

Buradaki if bloğunda söylediğimiz şey şu: "Eğer username 'Cyberworm' ve password '123456' ise 'Giriş Başarılı' ifadesini döndür." Şimdi, 'return' ifadesine odaklanalım. 

Normal bir şekilde bir değeri return ettik ama yanına bir de 'nil' ekledik. 'nil', null anlamına yani boş değer anlamına gelir. Bunu buraya yazmamızın amacı, birazdan yazacağımız kodlar ile buradaki hakimiyetimizi artırmaktır. Boş değer döndürecek; yani vasıfsız bir şey gibi görünebilir ama birazdan yapacağımız kontrol ile bunu daha iyi anlayacaksınız.

Bunu yaptıktan sonra bir 'else' bloğu açıyoruz ve eğer bu bilgiler doğru değilse kullanıcıyı uyarıyoruz.

Son olarak for yapısından aşağı doğru inen hafif silik olan çizgiyi takip edin. Oraya bir return ifadesi yazdık. Bunu yapmamızdaki asıl amaç; for döngüsü 3 kez döndükten sonra kırılmasını ve kullanıcıya uyarı vermesini istememizdendir. Fakat dikkatli bakın; return dedikten sonra "" şeklinde boş bir ifade döndürdük ve virgül koyup 'error' modülünün içerisindeki New() fonksiyonunu çağırdık. Bu fonksiyon, hata mesajı vermemizi sağlar.

Şimdi, fonksiyonumuzu tanımladık. Sıra, main() içerisine bu fonksiyonu tanımlamakta ve login() fonksiyonu içerisindeki kodları kontrol etmekte.

Yukarıdaki kod çok anlamsız bir kod gibi gelebilir. Normal şartlarda biz, başka bir fonksiyonu main() fonksiyonuna tanıtırken sadece fonksiyonun ismini yazıyorduk. Fakat burada bir atama yapmışız.

Az önce biz, iki değer döndürdük; biri return idi biri de error idi. Şimdi, bu iki değeri değişken olarak karşılamamız gerekiyor. Bu yüzden return ifadesi için 'user', error ifadesi için de 'err' şeklinde değişkenler tanımladık ve bu değişkenleri, login() içerisine atadık; elbette parametrelerimizin değerlerini de unutmadık.

Bu tanımlamayı yaptıktan sonra yine bir if bloğu ile err != nil şeklinde bir ifade yazdık. Az öncee 'nil' ifadesini, giriş işleminin başarılı olması durumunda kullandık; hatırlayın. Burada bu satırın demek istediği şey: "Eğer error, nil'e eşit değilse error'u yazdır." şeklindedir. Bunun daha Türkçeleşmiş haline bakalım: "Eğer giriş işlemi (nil) başarılı olmazsa hata mesajını ekrana ver."

İşte, 'nil'in amacı budur. Daha sonra else ile zaten kullanıcıya hoş geldiniz diyoruz. 

Bu yapının mantığını anlamanız biraz sürebilir; asla sorun değil. Aşağıda, kodun tam hali mevcut; anlattığım sıraya göre siz de aynı kodları yazın. Daha sonra bu kodları farklı projelere göre uyarlamaya çalışın. Anlamadığınız bir nokta olursa bize Instagram veya Telegram kanallarımızdan ulaşabilirsiniz: tıklayın.


Yayınlanma Tarihi: 2022-08-07 01:30:04

Son Düzenleme Tarihi: 2022-08-09 20:30:14