Das newSchlüsselwort in Sprachen wie Java, Javascript und C # erstellt eine neue Instanz einer Klasse.
Diese Syntax scheint von C ++ geerbt worden zu sein, wo newspeziell 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, newerschien mir das Schlüsselwort in Sprachen wie Java, Javascript und C # natürlich und offensichtlich. Dann fing ich an, Python zu lernen, das das newSchlü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 newin 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 newSchlüsselwort? Dieselbe Frage könnte für Javascript gestellt werden. In C #, mit dem ich weniger vertraut bin, newkann 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 newSchlü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, newder in C ++ inspirierten speicherverwalteten Sprachen wie Java, Javascript und C # liegen muss, aber nicht in Python?
fdie Funktion nicht verlassen wird, wird Stapelspeicher zugewiesen.
fwenn die umschließende Funktion zurückkehrt.
newSchlü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().