• immutability fonksiyonel programlamanin en temel ogesidir. bir seyi hicbir zaman degistirmez, her zaman yenisini yaratirsiniz. bunun en guzel yani hafiza yonetimi ve kod calisma hizi konusunda muhtelif optimizasyonlara kapi aralamasidir.

    basitce bir ornek vermek gerekirse, normal bir programlama dilinde (c# diyelim):

    int x = 5;

    int calc()
    {
    int y = 3 * x;
    int z = x + y;
    return z;
    }

    gibi bir kod yazdiginizda derleyici bu islemlerin hepsini islemciye yaptirir cunku *yaptirmak zorundadir*. stateful kod bunu gerektirir. zira x'in degeri kodun herhangi bir yerinde degisebilir. oysa immutable oldugu garanti olan bir kod yaziyorsaniz, mesela ayni kodu f#'ta yazmak istesek:

    let x = 5

    let calc =
    let y = 3 * x
    let z = x + y
    z

    buradaki fark su: let ile aslinda degiskenlere deger atamiyor, aslinda belli isimlere belli expression'lar belirliyorsunuz, makro gibi. derleyicinin bunlari gorup uretecegi tek kod "20" olacaktir zira x'in degismeyecegi garantidir, cunku degeri derleyici zamaninda zaten sabitlenmistir.

    immutable veri tipleriyle kodlama scope disi state'leri cok aza indirgediginden hem thread-safe hem de genel olarak bug'siz kod yazmak icin ideal bir altyapi saglar. ote yandan imperatif dillerle (mesela c#) yazilan immutable koddan alinacak optimizasyon verimi, f# gibi fonksiyonel dillerle olacagi kadar da olmaz muhtemelen.

    her ne kadar fonksiyonel programlama "yan etkilerden soyutlanma" uzerine kuruluysa da yan etkiler kacinilmaz oldugundan (dilin disindaki kutuphaneleri cagirma ihtiyacindan dolayi), bunlari hesaba katmak icin de cogu fonksiyonel dile monad kavrami getirilmistir.

    (bkz: monad)
    (bkz: fonksiyonel programlama)
  • (bkz: immutable)
hesabın var mı? giriş yap