Question

Lorsque je travaille avec des tables de hachage / dictionnaires, il m'est parfois difficile de spécifier des clés.

Par exemple: si je crée un dictionnaire simple (en utilisant Python pour cet exemple),

foo = {'bar': 'baz', 'foobar': 'foobaz' }

Je peux accéder aux valeurs (dans d'autres modules) avec les valeurs de clé: ( foo ['bar'] ) et obtenir baz en retour.

Selon les mots du Dr Evil, "plutôt classique, vraiment".

Malheureusement, l'utilisation de chaînes statiques pour les clés associe étroitement tous les modules utilisant ce dictionnaire à sa mise en œuvre. Bien entendu, cela peut également s'appliquer lors de l'utilisation d'autres types de clé (par exemple, Enums, Objects, etc.); Quoi qu’il en soit, tous les modules qui accèdent au dictionnaire doivent connaître les valeurs des clés.

Pour résoudre ce problème, j'utilise généralement des valeurs de chaîne constante statique (ou des énumérations si elles sont disponibles dans la langue) pour les clés, et je les stocke publiquement dans la classe / le module local ou dans un module / une classe séparé. Par conséquent, les modifications apportées aux clés du dictionnaire elles-mêmes sont conservées au même endroit.

Cela ressemble généralement à ceci:

BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'

Existe-t-il de meilleurs moyens de spécifier des clés de telle sorte que l'utilisation du dictionnaire ne couple pas nécessairement un module / une classe à sa mise en œuvre?

Remarque: j'ai lu quelques réponses dans SO qui traitent ce problème (par exemple, propriété-référence-une-clé-valeur-paire-dans-un dictionnaire ), mais les sujets ne semblaient pas aborder cette question spécifiquement. Les réponses ont été utiles, mais j'aimerais une plus grande expérience.

Était-ce utile?

La solution

Pourquoi ne pas créer une classe pour cela, qui ne contient que des propriétés? Cela se fait bien avec Python (d'après ce que je sais) et fonctionne bien avec d'autres langages. Refactoriser les noms est également trivial avec les outils actuels.

Autres conseils

Dans les cas où je fais circuler l'objet et que j'ai des clés connues, je préfère toujours ajouter un attribut à un objet. OMI, les dictionnaires sont utilisés lorsque vous ne savez pas quelles sont les clés.

Python est trivial:

foo.bar=baz

Java est à peu près la même chose:

class Foo { public String bar="baz"; }

Les performances Python seraient quasiment identiques, car une recherche de propriété est simplement une recherche dans un dictionnaire et les performances Java seraient meilleures.

Je crée parfois une classe séparée pour contenir les clés du dictionnaire. Cela leur donne leur propre espace de noms, ainsi que les avantages habituels d'avoir les clés dans des chaînes const, à savoir que vous n'avez pas le risque de fautes de frappe, vous obtenez l'achèvement du code et la valeur de chaîne est facile à modifier. Si vous ne souhaitez pas créer une classe séparée, vous bénéficiez de tous les avantages, à l'exception d'un espace de noms, uniquement à partir de chaînes const.

Cela dit, je pense que vous vous approchez du codage logiciel . Si les clés du dictionnaire changent, le code utilisant le dictionnaire est acceptable.

Personnellement, j'utilise votre méthode. C'est assez sensé, simple et résout le problème actuel.

Je fais habituellement la même chose; si la clé doit toujours être la même, créez une "constante statique" dans la langue dans laquelle la clé sera maintenue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top