"Statische Prüfung"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

"Statische Prüfung"

Beitragvon ws » Dienstag 24. Juli 2007, 13:39

Hallo,

für ein Projekt hätte ich gerne die Möglichkeit, symbolische Konstanten zu definieren. In C/C++ kann man ja enums benutzen, sowas wie

Code: Alles auswählen

enum SortBy {LEXICAL, LAST_USED};

void listObjects(SortBy sortBy = LAST_USED) {
        if (LEXICAL == sortBy) {
                cout << "Sorted lexically";
        }
        else if (LAST_USED == sortBy) {
                cout << "Sorted by age";
        }



Natürlich könnte man auch einfach nur Strings verwenden, bei der o.g. Methode kann der Compiler aber feststellen, ob die genannten Konstanten existieren.

In Python geht das wegen der grösseren Dynamik so ja nicht. Man kann sich natürlich einfach entsprechende globale Namen bauen (richtige Konstanten gibt's ja nicht), wie


Code: Alles auswählen

LEXICAL = 1
LAST_USED = 2


usw., dann könnte Pychecker oder Pylint sowas auch finden, aber wenn man viele Konstanten hat, ist das natürlich immer noch lästig. Gibt's da für Python irgendwelche sinnigen Lösungen, wie man sowas wie statische Prüfung realisieren kann?

Gruss

Wolfgang
BlackJack

Beitragvon BlackJack » Dienstag 24. Juli 2007, 14:13

Eine statische Prüfung geht nicht. Das liegt in der Natur der Sprache.

Es gibt allerdings ein paar `Enum`-Klassen, die zumindest dynamisch ein richtiger eigenständiger Typ sind und nicht einfach nur Zahlen.

http://cheeseshop.python.org/pypi/enum/0.4.2
https://launchpad.net/munepy/

Ansonsten sollte man sich fragen, ob man wirklich so viele Konstanten braucht. In einer Umsetzung des C++-Quelltextes könnte man in Python zum Beispiel einfach eine entsprechende Sortier- oder Schlüsselfunktion übergeben.
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Beitragvon ws » Dienstag 24. Juli 2007, 14:24

Hallo Blackjack,

vielen Dank für die Links, schaue ich mir mal an.

Gruss

Wolfgang

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]