Wie soll ich eine java.util.Map benennen? [geschlossen]

75

Ich habe eine java.util.Map, die von einem logischen Namen auf eine Reihe von Parametern abgebildet wird, die mit diesem Namen verwendet werden sollen.

Map<String,Parameters> howShouldINameThee = ...;

Was ist der beste Name für diese Karte?

Soll ich einfach gehen und das einfach anrufen parametersoder parametersMap?

Füge ich dem Namen Informationen über den Schlüssel hinzu, paramtersByNamedamit die Verwendung des StringSchlüssels offensichtlicher wird?

Alex B.
quelle

Antworten:

96

Eine Karte Karten etwas zu etwas anderem.
Ich benutze gerne Namen wie uidToPerson. "To" ist der kürzeste eindeutige Weg, den ich mir vorstellen kann, um zu zeigen, dass ich eine Karte habe.

Bearbeiten:
Ich werde hinzufügen, dass ich es vorziehen würde, die Karte so zu benennen, da "Schlüssel" und "Wert" in dieser Reihenfolge im Namen erscheinen. Im Gegensatz zu valueByKey. Bei Zuordnungsvorgängen steht der Schlüssel an erster Stelle. Sie put(key, value)oder get(key)das gibt einen Wert.

Dies ist natürlich eine Frage der persönlichen Präferenz.

z5h
quelle
1
Ich verwende diese Konvention, bin mir aber nicht sicher, wie ich eine Karte mit Karten abbilden soll ...
Carl Pritchett
@CarlPritchett für mich ziemlich ungewöhnlich, aber was ist mit fooToBarToBaz? Oder bazByBarByFoo ...
Paolo Fulgoni
@PaoloFulgoni Also ist das eine fooToBar -> Baz oder foo -> BarToBaz? Immer noch mehrdeutig ...
Carl Pritchett
1
@CarlPritchett Wenn Sie regelmäßig Hashmaps als Schlüssel verwenden, ist dies ein Problem. Ich habe dies in 20 Jahren Codierung noch nie getan oder gesehen. In diesem Fall muss ich eine andere Konvention verwenden.
z5h
@ z5h wahr! Aber ich dachte mehr darüber nach, wie einfach es war zu lesen. Ich bin damit einverstanden, dass ein neuer Name besser wäre.
Carl Pritchett
32

Ich tendiere parametersByNamedazu, keine Verwirrung darüber zu hinterlassen, was der Inhalt der Mapsind. Sie wissen nie, wann Sie Code erneut aufrufen müssen, den Sie lange nicht mehr angesehen haben.

In Java finde ich es unnötig, den Namen der Datenstruktur (wie parametersByNameMap) anzugeben, da die Eingabe explizit ist.

danben
quelle
Ihr letzter Satz ist korrekt für Karten, aber nicht unbedingt für Listen, Sätze usw.
Walter Tross
4
Es wird allgemein als schlechte Praxis angesehen, Namen mit Datentypen zu verschmutzen. Es ist redundant, spielt nicht gut mit Refactorings und beeinträchtigt die Lesbarkeit, indem Namen verlängert werden.
Christopheml
13

Sie beantworten die Frage tatsächlich selbst.

Was ist der beste Name für diese Karte?

Sie möchten Ihre Karte einem Namen zuordnen, also sagen Sie "Name für Karte" !!

Das sollte meiner Meinung nach die Namenskonvention sein: valueForKey .

Bei den anderen Vorschlägen keyToValue und valueByKey müssen Sie am Ende das Wort Map wie folgt hinzufügen: keyToValueMap, valueByKeyMap. Wenn Sie For verwenden , geht aus der Sprache hervor, dass es sich um eine Zuordnung handelt.

Eigil
quelle
IMO: Wenn Sie den Wert an erster Stelle setzen (ob in valueForKey oder valueByKey), wird der Typ, den Sie abrufen, offensichtlicher. Als Wert gibt ForKey.get (Schlüssel) den Wert an, was das erste ist, was ich beim Scannen lese.
Hubatish
1

In meinen Apps gibt es ziemlich viele Arten von Parametern.

Wenn ich beispielsweise in GAE die http-Anforderungsparameter in eine serialisierbare Form extrahieren muss, benenne ich die Map httpRequestParameters oder httpReqParams. sessionAttrs zum Beispiel.

Für GWT RPC, Client-zu-Server-Parameter-Hash, würde ich ihn client2ServerParams oder clnt2SrvrParms und das Gegenstück server2clientParams oder srvr2ClntParms nennen.

In openid consumer würde ich die Map, consumerAuthRequests oder redirectFormParameters und deren Gegenstück providerResponses benennen.

In der Karte der neu formatierten Eingabe-Hauptargumente würde ich es inputArgs nennen.

In meinen Fällen wären httpRequestParametersBy name, client2ServerParamsByName, consumerAuthRequestsByName, inputArgsByName oder inputArgValueByKey usw. redundant und zu lang, da ich immer wissen würde, dass der Schlüssel der Karte sowieso ein "Name" ist. Ich stelle nur sicher, dass der Name Plural ist, um mir eine Ahnung zu geben, dass es sich um eine Sammlung handelt.

Eine Ausnahme von dieser Vorgehensweise ist, wenn der Schlüssel kein Name, sondern ein Objekt ist, als ich die Karte wie FahrzeugByDriver, ProjByMgr, ToxicFoodListByAnimal benennen würde.

Gesegneter Geek
quelle