Sorunlardan biri, birçok durumda, karma tablosunun anahtarının bir dize olmasıdır. Bu nedenle yöntemin tüketicileri, verileri ayıklamak için hangi anahtarların kullanılacağını bilmek zorundaydı. Bu, verilere erişilirken yanlış yazılmalardan kaynaklanan hatalar için potansiyel oluşturur.
Diğer bir dezavantaj, yeniden kaplanabilirliktir. Daha sonra bir üyenin adını değiştirmeye karar verirseniz, değiştirmeniz gereken bir sürü sihirli dizeye sahip olursunuz. Çoğu iyi IDE tarafından sağlanan yeniden düzenleme araçlarını kullanarak bir sınıf üyesini yeniden adlandırmak çok daha kolaydır. Karma tabloyla, sorunlu olabilecek tüm kaynak dosyalar üzerinde bir bul / değiştir işlemi yapmanız gerekecektir.
Son olarak, hem erişim hem de ad açısından üye erişiminin derleme zamanı denetimini kaybedersiniz. Karma tablonuz sadece bir tür obejct içeriyorsa, ikincisi böyle bir sorun değildir, ancak çok sayıda (aynı hiyerarşi zincirinde bile) içeriyorsa, gerçekten dilinizin tür sistemini kullanmak ve orada derleme zamanı almak istersiniz. Çoğu IDE'de bir çeşit intellisense / autocomplete özelliklerine sahip olacaksınız - bunlar tür sistemine bakarak çalışır, ancak hash tablo anahtarlarında size yardımcı olmazlar.
Bir karma tablosunun (veya anahtar değer çiftlerinin böyle bir koleksiyonunun) döndürülmesinin uygun olacağı zamanlarda olduğu gibi , derleme zamanında hem değerler hem de anahtarlar bilinmediğinde bunu kullanırsınız . Örneğin, bir sorgu dizesini ayrıştıran ve anahtarları ve karşılık gelen değerleri döndüren bir yönteminiz varsa, bir karma tablosu iyi bir seçim olacaktır. Bu durumda, bir tür değişmez veya salt okunur hash tablosu döndürmeyi de düşünmek istersiniz.
Düzenle - Bu cevapta dile getirilen noktaların çoğu, dinamik dillerden bahsederken geçerli değildir :)