La newparola chiave in lingue come Java, Javascript e C # crea una nuova istanza di una classe.
Questa sintassi sembra essere stata ereditata dal C ++, dove newviene utilizzata specificamente per allocare una nuova istanza di una classe sull'heap e restituire un puntatore alla nuova istanza. In C ++, questo non è l'unico modo per costruire un oggetto. Puoi anche costruire un oggetto nello stack, senza usare new- e in effetti, questo modo di costruire oggetti è molto più comune in C ++.
Quindi, proveniente da uno sfondo C ++, la newparola chiave in lingue come Java, Javascript e C # mi è sembrata naturale e ovvia per me. Poi ho iniziato a imparare Python, che non ha la newparola chiave. In Python, un'istanza viene costruita semplicemente chiamando il costruttore, come:
f = Foo()
All'inizio, questo mi è sembrato un po 'off, fino a quando mi è venuto in mente che non c'è motivo per Python di avere new, perché tutto è un oggetto, quindi non c'è bisogno di chiarire le varie sintassi dei costruttori.
Ma poi ho pensato: qual è davvero il punto newin Java? Perché dovremmo dirlo Object o = new Object();? Perché non solo Object o = Object();? In C ++ ce n'è sicuramente bisogno new, dal momento che dobbiamo distinguere tra allocazione sull'heap e allocazione sullo stack, ma in Java tutti gli oggetti sono costruiti sull'heap, quindi perché anche avere la newparola chiave? La stessa domanda potrebbe essere posta per Javascript. In C #, che conosco molto meno, penso che newpossa avere qualche scopo in termini di distinzione tra tipi di oggetto e tipi di valore, ma non ne sono sicuro.
Indipendentemente da ciò, mi sembra che molti linguaggi che sono venuti dopo il C ++ semplicemente "ereditassero" la newparola chiave, senza realmente averne bisogno. È quasi come una parola chiave vestigiale . Sembra che non ne abbiamo bisogno per nessun motivo, eppure è lì.
Domanda: ho ragione su questo? O c'è qualche motivo convincente che newdeve essere in C ++ - ispirato ai linguaggi gestiti dalla memoria come Java, Javascript e C # ma non Python?
fnon sfugge alla funzione, alloca lo spazio dello stack.
fquando ritorna la funzione che racchiude.
newparola chiave. Ovviamente voglio creare una nuova variabile, stupido compilatore! Un buon linguaggio sarebbe a mio parere hanno una sintassi similef = heap Foo(),f = auto Foo().