Das new
Schlüsselwort in Sprachen wie Java, Javascript und C # erstellt eine neue Instanz einer Klasse.
Diese Syntax scheint von C ++ geerbt worden zu sein, wo new
speziell eine neue Instanz einer Klasse auf dem Heap zugeordnet und ein Zeiger auf die neue Instanz zurückgegeben wird. In C ++ ist dies nicht die einzige Möglichkeit, ein Objekt zu erstellen. Sie können auch ein Objekt auf dem Stapel erstellen, ohne new
- zu verwenden, und tatsächlich ist diese Art der Erstellung von Objekten in C ++ weitaus üblicher.
Aus einem C ++ - Hintergrund stammend, new
erschien mir das Schlüsselwort in Sprachen wie Java, Javascript und C # natürlich und offensichtlich. Dann fing ich an, Python zu lernen, das das new
Schlüsselwort nicht hat . In Python wird eine Instanz einfach durch Aufrufen des Konstruktors wie folgt erstellt:
f = Foo()
Anfangs schien mir das ein bisschen abwegig zu sein, bis mir klar wurde, dass es für Python keinen Grund gibt new
, weil alles ein Objekt ist und man nicht zwischen verschiedenen Konstruktorsyntaxen unterscheiden muss.
Aber dann dachte ich mir - worum geht es eigentlich new
in Java? Warum sollten wir sagen Object o = new Object();
? Warum nicht einfach Object o = Object();
? In C ++ ist dies definitiv erforderlich new
, da zwischen Zuweisung auf dem Heap und Zuweisung auf dem Stack unterschieden werden muss, in Java jedoch alle Objekte auf dem Heap erstellt werden. Warum also überhaupt das new
Schlüsselwort? Dieselbe Frage könnte für Javascript gestellt werden. In C #, mit dem ich weniger vertraut bin, new
kann es meiner Meinung nach sinnvoll sein, zwischen Objekttypen und Werttypen zu unterscheiden, aber ich bin mir nicht sicher.
Unabhängig davon scheint es mir, dass viele Sprachen, die nach C ++ kamen, das new
Schlüsselwort einfach "geerbt" haben - ohne es wirklich zu brauchen. Es ist fast wie ein Schlagwort . Wir scheinen es aus keinem Grund zu brauchen, und doch ist es da.
Frage: Habe ich diesbezüglich Recht? Oder gibt es einen zwingenden Grund, new
der in C ++ inspirierten speicherverwalteten Sprachen wie Java, Javascript und C # liegen muss, aber nicht in Python?
f
die Funktion nicht verlassen wird, wird Stapelspeicher zugewiesen.
f
wenn die umschließende Funktion zurückkehrt.
new
Schlüsselwort hat. Natürlich möchte ich einen neuen variablen, blöden Compiler erstellen! Eine gute Sprache wäre meiner Meinung nach einer Syntax wief = heap Foo()
,f = auto Foo()
.