Immutable değişken, bir kez atandıktan sonra değiştirilemeyen değerdir. Bu tasarımın arkasında birkaç somut neden vardır. Hata ayıklamayı kolaylaştırır. Bir değer hiç değişmiyorsa, programın herhangi bir noktasında o değerin ne olduğunu kesinlikle bilirsiniz. Değiştirilebilir (mutable) değişkenlerde ise "bu değer nerede, ne zaman değişti?" sorusu bazen saatlerce hata ayıklamaya yol açar. Eşzamanlı programlamada immutable değişken çok büyük avantaj sağlar. Birden fazla thread aynı anda bir değeri okuyabilir; immutable olduğu için kilitlenme (deadlock) veya yarış koşulu (race condition) riski yoktur. Mutable paylaşılan state ise senkronizasyon mekanizmaları gerektirir ve bu mekanizmalar hem hata kaynağı hem de performans yükü oluşturur. Kod okunabilirliği artar. Fonksiyon parametrelerini immutable tasarımla geçirdiğinizde, o fonksiyonun parametre değerini değiştirmeyeceğini garanti altına almış olursunuz. Bu garanti, kodu okuyan başka bir geliştirici için önemli bir bağlam sağlar. İmmutable değişken her yerde uygun değildir. Performansa duyarlı döngülerde ya da büyük veri yapılarını sıkça güncellemek gerektiğinde, her değişiklikte yeni bir kopya oluşturulması bellek ve işlemci maliyeti doğurur. Bu durumlarda yapısal paylaşım (structural sharing) kullanan persistent veri yapılarına bakılabilir. Pratik kural: varsayılan olarak immutable tasarlayın, mutability'ye yalnızca gerçekten gerektiğinde ve açıkça izin verin.