"Typsicherheit" (war: Re: [Python-de] socket und umlaute)
Hallo Olaf, On Sat, 2003-11-22 13:50:32 +0100, Olaf 'Ruebezahl' Radicke wrote:
Alles schön und gut. Eine so hohe Abstraktion mag seine Vorteile haben. Aber es währe noch schöner wenn ich die *Möglichkeit* hätte, Typen so zu deklarieren das ich z.B. nicht mehr einfach eine Variable mal als str mal int benutzen kann. Weil wenn ich ein ziemlich langen verworrenen Code habe, wie soll ich da raus finden, ob ich jetzt ein int oder ein str vor mir hab? Selbst wenn ich im Code nach einer Zuweisung suche kann ich Pech haben und in irgend einer unterfunktion wird da stillschweigend aus ein int ein str gemacht. Eh ich den Fehler gefunden habe, können Tage vergehen.
Wenn du "langen verworrenen" Code hast, _schreit_ das nach Vereinfachung/Refaktorierung des Codes, unabhängig davon, ob die Verknüpfung eines Namens mit einem bestimmten Typ möglich ist oder nicht. :-) Letzteres flickt das eigentliche Problem nur sehr notdürftig. Du kannst in Python nicht "aus einem int ein str" machen. Ein Objekt hat immer einen bestimmten Typ (außer vielleicht so pathologischen Fällen wie Zuweisungen an __class__ ;-) ). Meinst du eher "eine Funktion/Methode akzeptiert ein int und gibt ein str zurück"? Wenn ja, musst du die Schnittstellen deiner Module/Klassen/Methoden/Funktionen so entwerfen, dass sie nicht nur irgendwie dein Problem lösen, sondern auch intuitiv - d. h. ohne genaue Kenntnis der inneren Implementierung - benutzbar sind. Vielleicht habe ich dich bzw. dein Problem auch nicht richtig verstanden und bin auf dem falschen Dampfer. :-)
Ich könnte mir eine Klasse bzw. Typ "StaticTyp" Vorstellen:
int_vier = StaticTyp(int, "4") str_vier = StaticTyp(str, "4")
try: if int_vier == str_vier: print "kein Fehler" except StaticTypError, par: print "So ja nicht: ", par
Du könntest diese Klasse StaticTyp, soweit ich sehe, in Python schreiben. Das wäre allerdings nur begrenzt wirksam, da viele von Python's eingebauten oder in Modulen vorliegenden Hilfsmitteln nach wie vor gewöhnliche "ints" und "strs" zurückgeben würden. Nichtsdestotrotz bin ich ziemlich sicher, dass dein Problem anders gelöst werden kann - und sollte - als mit statischer Typbindung.
PS: Was meine Programmiererfahrung betrifft. In den letzten ca. 2 Jahren habe ich mich mit C, C++ und Perl beschäftigt. Perl war meine erste Sprache, die ich aber sehr schnell verwarf, weil sich Python wesentlich leichter debuggen lässt.
Das ging mir auch so und war der Grund für die Abkehr von Perl: Manchmal ging die Zeit, die ich beim vermeintlichen "Einfach-so- hinschreiben-können" gespart hatte, wieder für die Fehlersuche drauf. Meine Fehler in Python-Code (zumindest die, die ich finde ;-) ) sind dagegen eher trivial und schnell zu beheben, oder selten.
Für C und C++ sind meine Projekte zu klein (auch personell) als das der Aufwand noch in Relation zum Nutzen stände.
C oder C++ zu verwenden hat m. E. nichts mit der Größe des Projekts zu tun, sondern mit der Art des Projekts. Ich kann mir gut vorstellen, dass auch für viele "große" Projekte Python weitaus besser als C/C++ geeignet ist/wäre. Viele Grüße Stefan _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (1)
-
Stefan Schwarzer