şükela:  tümü | bugün
  • ing. const doğruluğu. imperatif programlama dillerinde bir kod öbeğinin veriyi değiştirmeyeceğini garanti edebilmesine deniyor. ismini const adını verdiğimiz sabit değerlerden alıyor. c++ gibi dillerde const sadece sabit tanımlama için değil "ben bunu bir daha tövbe değiştirmeyeceğim" beyanında bulunmak için de kullanılabiliyor. const-correctness sağlayan dillerde de bu kodun asla değiştiremeyeceği garanti edilebiliyor.

    mesela java'da final diye bi keyword var. gelen parametreyi değiştirmeyeceğini garanti etmeni sağlıyor ama const-correctness garantisi vermiyor. o yuzden:

    void bisey(final object hede)
    {
    hede = ahmet;
    }

    derleyici hatası veriyor. ama const-correctness sağlayamadığından şu kod derleyici hatası vermiyor:

    void bisey(final object hede)
    {
    hede.hodo = ahmet;
    // ya da
    hede.sethede(ahmet);
    }

    yani hede nesnesinin içine müdahale edebiliyoruz. derleyici bunu anlamıyor. bizi uyarmıyor. "const nesnesine müdahale etmesene oğlum demiyor". c++'ta ise bu const keyword'leri parametreler dışında sınıf üyeleri metodlarında da kullanılabiliyor. haliyle tüm kodun const correct olmasını deklare edebilmek ve bunu derleme zamanında kontrol edebilmek mümkün oluyor.

    java'daki durum c#'taki readonly kelimesi için de geçerli. c# da const doğruluğu sağlayamıyor.

    c++'ta const doğruluğu için ilgili tüm sınıf, metod ve parametre zincirini const olarak deklare etmek gerekiyorken, d gibi dillerde otomatikman immutable tanımlanmış ya da yaratılmış nesnelerin modifikasyonu üye seviyesinde engelleniyor. (const_cast gibi direktiflerle onları da aşmak mümkünmüş ama o durumda zaten bunu isteyerek yapmış oluyorsun)

    mesela d dilinde şöyle yazabiliyon:

    void bisey(immutable object hede)
    {
    hede.hodo = ahmet;
    hede.sethodo(ahmet);
    }

    bu kodun iki satırı da ayrı ayrı patlıyor sınıf üyelerinde değişikliğe yol açtıklarından.

    başta imperatif dil dedik zira const doğruluğu sağlamak yan etkilerin özel olarak deklare edilme zorunluluğundan dolayı fonksiyonel dillerde çok doğal bir özellik. zaten her şey const. haliyle const doğruluğunu özel olarak zikretmeye gerek yok. tam tersine mutable kodu deklare etmen gerekiyor.

    (bkz: immutable/@ssg)

    gelecek sayıda: "gui thread'i block eden adama öyle bir şey oldu ki..."
  • buradaki bir yazıda değinilen konu