Alex: Konfigurationsparser

Beitrag lesen

Hallo,

ich möchte gern einen relativ simplen Konfigurationsparser bauen. Als Ergebnis möchte ich gerne ein Objekt haben, das ich mit dem Namen einer Konfigurationsoption befragen kann und welches darauf mit dem entsprechenden Wert dieser Option antwortet. Genau hier bräuchte ich etwas Hilfe:

Die Werte der einzelnen Optionen können beispielsweise Integers, Floats und Strings sein. Nehmen wir an, der Parser hätte beim Lesen der Konfigdatei bereits alles ausgeknobelt und wüßte, welche Option welchen Datentyp hat. Nehmen wir außerdem an, daß bestimmte Optionen immer einen festen Typ haben, d.h. optA ist immer ein Float, optB immer ein Integer, ... Wenn ich nicht gerade eine dynamisch typisierte Sprache wie z.B. PHP verwende stellt sich nun folgende Frage:

Wie gestalte ich am besten eine Methode (nennen wir sie mal getValue), um auf diese Werte zuzugreifen? Sie müßte ja quasi einen variablen Rückgabetyp haben.

Mir fallen dazu drei Möglichkeiten ein:

(1) Der Rückgabewert ist sowas wie Microsofts VARIANTs (aus COM), d.h. Typ und Wert werden gemeinsam gespeichert und man muß _nach_ Erhalt dieses Wertes prüfen, was man eigentlich bekommen hat.

(2) Der Aufrufer _weiß_, was er haben will, bekommt von getValue nur sowas wie einen Null-Pointer in C und muß dann selber auf den entsprechenden Datentyp casten.

(3) Ähnlich wie (2), nur daß es für jeden Datentyp eine eigene Version von getValue gibt. Die Abfrage von optB könnte dann z.B. über eine Methode mit dem Prototyp int getIntValue(string optName) passieren.

Version (2) scheidet eigentlich schon aus, weil (3) das Gleiche in meinen Augen etwas "sauberer" löst. Version (1) fand ich immer recht hakelig in der Verwendung ...

Letztlich laufen diese drei Versionen aber immer auf das gleiche Prinzip hinaus. Gibt es denn für statisch typisierte Sprachen wie C oder Java noch andere, vielleicht _bessere_ Ansätze?

Viele Grüße

Alex