Hilfe bei Bezeichner-Wahl #2



  • Ich bin schon wieder dermaßen blockiert, das ich nicht weiter machen kann.

    Ich habe ein array aus pair von string und WORD. WORD soll eine Farbe sein und string ihr Name. Das array habe ich colors genannt.

    Und zwei Funktionen getColors() //gibt nur die Farben, also die pair.second in einem vector, zurück.
    und getColorNames() //gibt nur die Namen zurück.

    Jetzt will ich aber auch eine, die das vollständige pair-array zurückgibt. Aber wie benenne ich die?! Bzw, wie benenne ich die anderen um?



  • Es ist wohl unhöflich, keine Antwort abzuwarten, aber könnte ich in getColorNames() das array zurück geben? Passt zwar nicht direkt, aber mir fällt sonst nichts ein.



  • lemon03 schrieb:

    Jetzt will ich aber auch eine, die das vollständige pair-array zurückgibt. Aber wie benenne ich die?! Bzw, wie benenne ich die anderen um?

    Wenn in dem String der Name der Farbe steckt, dann steckt in dem Word nicht die Farbe selber (kann ja nicht), sondern ein Zahlencode, der RGB- oder CMYK-Code oder was auch immer. Vielleicht kann deine Namensgebung das widerspiegeln.

    Vielleicht hilft es auch, das pair<string, WORD> nicht anonym zu benutzen, sondern ihm auch einen passenden Namen zu geben.



  • Also

    typedef std::pair<std::string, WORD> irgendwas;
    //und/oder
    typedef std::array<irgendwas, n> sonstwas;
    

    ?

    Habe ich wieder keinen Plan, wie ich das nennen will. Ich würde das pair gerne 'color' und das gesamte array 'colors' nennen, weil Farbe und Name zusammengehören sollen. Allerdings soll in getColors() nur ein vector aus WORD zurück gegeben werden.



  • ColorEntry



  • Tyrdal schrieb:

    ColorEntry

    Danke. Für das pair?

    getColors() für das array?
    getColorValues() für die Farbwerte?

    Auf getColorNames() kann ich eigentlich verzichten.



  • Tyrdal schrieb:

    ColorEntry

    Farbeintrag? Nur, wenn das typedef pair<> ein Implementierungsdetail bleibt und nicht public wird.

    Wenn es public werden soll (und das scheint mir der Fall zu sein), dann gehört die Tatsache, dass es sich um einen Eintrag (in einer Tabelle? einer Liste?) handelt, nicht in die Öffentlichkeit.

    Vielleicht ColorDescription?



  • Printe schrieb:

    Wenn es public werden soll (und das scheint mir der Fall zu sein), dann gehört die Tatsache, dass es sich um einen Eintrag (in einer Tabelle? einer Liste?) handelt, nicht in die Öffentlichkeit.

    Könntest Du das erläutern? Nicht das ich da jetzt durcheinanderkomme und was falsch mache.

    Die Variable von array<pair> und das Erzeugen ist private, nur die Rückgabefunktion ist public.



  • lemon03 schrieb:

    Könntest Du das erläutern? Nicht das ich da jetzt durcheinanderkomme und was falsch mache.

    Ich meine folgendes:
    Hier:

    class ColorCollection
    {
    private:
    	typedef std::pair<std::string, WORD> ColorEntry;
    	std::vector<ColorEntry> theEntries;
    };
    

    ist der ColorEntry ein Implementierungsdetail der Klasse, von außen nicht sichtbar, da privat. Wie sie die Farben intern verwaltet, ist ihre eigene Angelegenheit und welcher Name für das Pair gewählt wird, ist sekundär.

    Hier:

    class ColorCollection
    {
    public:
    	typedef std::pair<std::string, WORD> ColorEntry;
    	std::vector<ColorEntry> GetAllColorEntries () const;
    };
    

    ist das Pair Teil des öffentlichen APIs. Der Umstand, dass es sich um einen Listen- oder was-auch-immer-Eintrag handelt, ist für die Öffentlichkeit bedeutungslos. Der Name soll so gewählt werden, dass er treffend das beschreibt, was das Pair in der Öffentlichkeit darstellt, z.B. eine Farbbeschreibung (ColorDescription).

    Übrigens machen Pairs nur wirklich Sinn im Zusammenhang mit assoziativen Containern (map etc.). Als allgemeine Datenstruktur sind sie zu unflexibel (genau zwei Komponenten), und sie verraten Implementierungsdetails, was man nicht tun sollte. Ein struct oder class wäre hier vielleicht besser.



  • Danke für die Erläuterung und den Hinweis.

    Über die struct will ich gerne nachdenken. Nur ist immer noch das Problem mit den Bezeichnungen.

    Habe mich jetzt mit getColors() und getColorValues() abgefunden. Wenn das soweit in Ordnung ist, schaue ich mal wegen Deinen Vorschlägen.



  • noch ne kurze andere Sache:

    'eine Anzahl von Farben', wie übersetzt man das in einen Variablennamen?

    colors_count, colorscount?



  • Ich habe jetzt tatsächlich eine kleine Klasse für die Farben und ihre Namen geschrieben. Hatte nur erst etwas Schwierigkeiten, sie einzubinden. Dadurch hat sich auch das mit den Bezeichnernamen erledigt.

    Aber gut. Schluß jetzt mit den Selbstgesprächen. Danke für die Hilfen.



  • Hi Lemon03,

    ich verwende für eigene Konstanten, Variablen, Klassen... bevorzugt deutsche Begriffe, da ist man wenigstens eingermaßen vor Kollisionen mit existierenden Namen sicher.

    Gruß Mümmel



  • Geht leider nur wenn auch alle Bteiligten deutsch können.


Log in to reply