Yazılım Geliştirmede İnce İpuçları
Yazılım geliştirmek bir sanattır ve ince ayrıntıları vardır. Bazen bu ince ayrıntılar hayat kurtarır bazen de performans sağlar. Sözü çok uzatmadan faydalı olacağını düşündüğüm bazı ipuçlarını beraber inceleyelim.
Noktalı Sayı Karşılaştırmaları
Noktalı sayı karşılaştırmalarını yaparken sayi1 == sayi2 gibi birebir eşitlik arama yerine kimi zaman bir tolerans payı bırakarak karşılaştırma daha faydalı olabilmektedir. Örneğin metal işleri yapan bir firma için sistem geliştiriyorsunuz ve ağırlık birimi olarak kilo kullanılıyor. Hesaplamada bir değerin 1 ton olup olmadığını sorgulamanız gerekiyor ve şöyle bir şart yazdınız if(agirlik == 1000) ve ağırlık değişkeninin değeri 1000,004 olarak gelmiş olsun. Yapılan iş için aslında bu ağırlık değeri bir ton olarak kabul edilebilir ama bilgisayarın hesaplamasından dolayı 4 gramlık bir fark işlemi yanlış kabul etmektedir. Böyle bir karşılaştırma yerine aşağıdaki gibi bir tolerans ile karşılaştırma yapılması daha doğru sonuç verir.
int tolerans = 0.05;
if(Math.Abs(agirlik - 1000) >= tolerans)
{
//
}
Bu şekilde alınan ağırlık kabul edilebilir ağırlık dışında bir eştlikte ise işlem çalışır.
Mantıksal Operatör Kullanımları
Mantıksal operatörler birden fazla artı bağlamak için kullanılan operatörlerdir. VE ve VEYA operatörlerinin kullanımı ile ilgili birer ipucu konuşalım.
VE (&&) operatörünün doğru sonucu dönmesi için bütün şartlarının doğru olması gerekmektedir. Bu sebeple && operatörü kullanılırken karşılaşılan ilk yanlış şartta geriye kalan şartlar sorgulanmadan program sonraki satıra geçecektir. && operatörünün bu özelliğinden dolayı yanlış olma ihtimali yüksek olan şartlar başta yazılırsa performans artacaktır.
VEYA (||) operatörünün doğru sonucu dönmesi için herhangi bir şartın doğru olması yetmektedir. Bu sebeple || operatörü kullanılırken karşılaşılan ilk doğru şartta geriye kalan şartlar sorgulanmadan program sonraki satıra geçecektir. || operatörünün bu özelliğinden dolayı doğru olma ihtimali yüksek olan şartlar başta yazılırsa performans artacaktır.
Döngüler (while – for – foreaach)
Döngüler (while – for – foreaach) içerisinde atama yapılan değişkenlerin tanımlanması döngü içerisinde değil de döngü dışında tanımlanması yapılırsa performans elde edilir. Örneğin:
for(int i = 0; i < 10000; i++)
{
int b = i *2;
}
Şeklinde b değişkeni tanımlandığında her döngüde b değişkeninin geçerlilik ömrü sona erdiğinden bellek üzerinden silinir ve b için bellek üzerinde yeni alan tahsisi yapılır, ancak bunun yerine geçerlilik ömrü bütün döngü için geçerli olacak şekilde tanımlanırsa bellek üzerinde alanın silinip yenisinin oluşturulması için gereken işlemlerden tasarruf sağlanır.
int b;
for(int i = 0; i < 10000; i++)
{
b = i *2;
}
Sinsi Hatalar
Yazılım geliştirme sürecinde yapılan sintax hatalarında kullanılan IDE zaten bas bas bağırarak hatamızı yüzümüze vurur. Asıl tehlike arz eden hatalar yapılan mantıksal hatalar. Bu hatalar sintaxa tamamen uygundur ve hata alınmayana kadar kendilerini belli etmezler. Bu hatalardan bazıları;
if – for – while gibi yapılardan sonra “;” kullanmak: Böyle bir durumda eğer kullanılan if, else olmadan kullanılıyorsa mantık hatasına sebebiyet verir.
if(a == b);
{
//çalışacak kodlar
}
Böyle bir kullanımda a ve b eşit ise hiç bir işlem yapmayacak ve sonraki adıma geçecektir.
Ancak kullanılan if, else ile kullanılan bir if ise sintax hatası verecektir, bu durumda program zaten derlenemeyeceğinden sıkıntı olmayan hata yani 🙂
Kullanıcıya Güvenmek
Kimi zaman yazılım geliştirirken “bunu da yapacak değil ya” deyip önlem alınmayan durumlar baş ağrıtabilir. Örneğin kullanıcının yaş bilgisi isteyen bir metin alanına “buraya harf yazacak değil ya, yaş soruyor işte” deyip format kontrolü yapılmaması durumunda daha ilk kullanımda görüyoruz ki kullanıcı yaş alanına adını veya soyadını yazmaya çalışıyor ve program çöküyor. Sonuç, “bunlar yapamamış bunu”. Kuralımız şu: veri tabanına gidelim, dosyadan okuyalım veya kullanıcıdan veri alalım kaynak ne olursa olsun, kendi uygulamamızdaki konfor alanı dışına çıktığımız anda format kontrolü mutlaka yapılmalı.
Eline sağlık
Teşekkür ederim hocam