In Python (und gelegentlich in PHP), wo Variablen keine festen Typen haben, führe ich häufig 'Typtransformationen' für eine Variable auf halbem Weg durch die Logik meines Codes durch. Ich spreche nicht (unbedingt) von einfachen Casts, sondern von Funktionen, die den Typ einer Variablen ändern, während sie im Grunde den gleichen Wert oder die gleichen Daten darstellen.
Zum Beispiel könnte ich Code wie diesen schreiben, wenn ich eine response
Webanforderung mache, indem ich die Variable zum Speichern eines addurlinfo-Objekts verwende, dann den Zeichenfolgeninhalt dieses Objekts und das Wörterbuch, das durch Parsen der Zeichenfolge als JSON zurückgegeben wird:
response = urlopen(some_url)
assert response.info().type == 'application/json'
response = response.read()
logger.debug('Received following JSON response: ' + response)
response = json.loads(response)
do_something(response)
(Okay, es ist ein leicht erfundenes Beispiel, aber ich denke, es zeigt die Idee gut). Meiner Meinung nach ist dies besser als die Verwendung von drei separaten Variablennamen, da a) die response
Variable im Grunde die gleichen Informationen enthält, nur in einen anderen Typ "transformiert" wurde, und b) die früheren Objekte nicht verwendet werden werden weiter unten in der Funktion benötigt, da ich sie durch Neuzuweisung über ihre Variable für späteren Code nicht verfügbar gemacht habe.
Ich denke, der Nachteil ist, dass der Leser verwirrt sein kann, welcher Typ die Variable zu einem bestimmten Zeitpunkt ist.
Ist das ein schlechter Stil und sollte ich im obigen Beispiel drei verschiedene Variablen verwenden, anstatt sie einer neu zuzuweisen? Ist diese Standardpraxis auch in dynamisch typisierten Sprachen oder nicht? Ich habe nicht genug vom Code anderer Leute gesehen, um es zu wissen.
response_addurlinfo
,response_str
,response_dict
) sind noch hässlicher. Wie geht's?