L'un des problèmes serait que dans de nombreux cas, la clé de la table de hachage serait une chaîne. Ainsi, les consommateurs de la méthode devraient savoir à l'avance quelles clés utiliser pour extraire les données. Cela donnerait le potentiel d'erreurs dues à des fautes d'orthographe lors de l'accès aux données.
Un autre inconvénient est la refactorabilité. Si vous décidez plus tard de changer le nom d'un membre, vous avez alors un tas de cordes magiques qui doivent également changer. Il est beaucoup plus simple de renommer un membre de la classe à l'aide des outils de refactoring fournis par la plupart des bons IDE. Avec une table de hachage, vous devrez probablement effectuer une opération de recherche / remplacement dans tous les fichiers source, ce qui pourrait être problématique.
Enfin, vous perdrez le temps de compilation pour vérifier l'accès des membres - à la fois en termes de nom et de type. Ce dernier n'est pas un problème si votre table de hachage ne contient qu'un seul type d'objet, mais s'il en contient plusieurs (même dans la même chaîne de hiérarchie), vous voulez vraiment tirer parti du système de types de votre langue et y obtenir du temps de compilation. Dans la plupart des IDE, vous aurez une sorte de fonctionnalités d'intellisense / de saisie semi-automatique - celles-ci fonctionnent en regardant le système de type, mais elles ne pourront pas vous aider avec les clés de table de hachage.
En ce qui concerne les moments où il serait approprié de renvoyer une table de hachage (ou une autre collection de paires de valeurs de clés), vous l'utiliseriez lorsque les valeurs et les clés ne sont pas connues au moment de la compilation. Par exemple, si vous avez une méthode qui analyse une chaîne de requête et renvoie les clés et les valeurs correspondantes, une table de hachage serait un bon choix. Dans ce cas, vous voudrez également penser à renvoyer une sorte de table de hachage immuable ou en lecture seule.
Modifier - La plupart des points soulevés dans cette réponse ne s'appliquent plus lorsque vous parlez de langues dynamiques :)