Kodsal Dumurlar

Bilgisayar programları, insanlardan farklı olarak bulunduğu zamana ya da mekana göre değişmeyecek kesin sonuçlar üretir. Bir yazılımdan aynı girdilere karşı aynı çıktıları alırız.

Özellikle nesneye yönelik programlama dillerinin katı kuralları olduğunu hepimiz biliriz. Tüm yazılımlar bu kurallar çerçevesi içerisinde üretilir. Kuralların dışına çıkmaya çalıştığımızda derleyici aşamasında ya da çalışma aşamasında hatalarla karşılaşırız.

Yazılımcının esas görevlerinden biri yazdığı programın ruhuna bürünerek onun gibi düşünmesidir. Ancak bu bakış açısıyla çok daha hızlı ve stabil programlar yazılabilir. Fakat bazen aklınıza öyle durumlar gelir ki yazacağınız kod satırlarının nasıl çalışacağını kestiremezsiniz.

İşte benden bir kaç örnek:

Birbirinden türeyen sınıflar

Aşağıdaki yapıda 3 adet sınıfımızın olduğunu düşünelim. A sınıfı C’den türesin, C sınıfı B’den türesin, B sınıfı da A’dan türesin. Sizce bu mümkün mü?

public class A extends C {
    A() {}
}
 
public class B extends A {
    B() {}
}
public class C extends B {
    C() {}
}

Ufak bir kafa karışıklığına neden olsa da derleyici aşamasında hata mesajını alıyoruz (cyclic inheritance involving)

Boşluk İşaretleyici (Null Pointer)

A sınıfımızın boşluk(null) döndüren getA adında bir fonksiyonu olsun. Bu fonksiyonu dışardan tetikleyip A sınıfına ait sabit test değerini alabilir miyiz?

public class A {
    static String test = "test mesaji";
    A getA() {  return null; }
    A() {}
}
 
public class Main {
    public static void main(String[] args) {
        A a = new A();
        String msg = a.getA().test;
        System.out.println(msg);
    }
}

Main sınıfını çalıştırdığımızda “NullPointerException” hatası beklerken, hatasız bir şekilde konsolda “test mesaji” yazısını görüyoruz.

Konu hakkında biraz araştırma yaptığımda Java Puzzlers kitabı ile karşılaştım. Java üzerinde karşılaşılan tuzakları, tehlikeleri ve çıkmazları konu edinmiş bir kitap.

Web sayfası: http://www.javapuzzlers.com
Örnek bölüm: http://www.javapuzzlers.com/java-puzzlers-sampler.pdf

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir