A new
palavra-chave em linguagens como Java, Javascript e C # cria uma nova instância de uma classe.
Essa sintaxe parece ter sido herdada do C ++, onde new
é usada especificamente para alocar uma nova instância de uma classe na pilha e retornar um ponteiro para a nova instância. No C ++, essa não é a única maneira de construir um objeto. Você também pode construir um objeto na pilha, sem usar new
- e, de fato, essa maneira de construir objetos é muito mais comum em C ++.
Portanto, vindo de um background em C ++, a new
palavra - chave em linguagens como Java, Javascript e C # parecia natural e óbvia para mim. Então comecei a aprender Python, que não tem a new
palavra - chave. No Python, uma instância é construída simplesmente chamando o construtor, como:
f = Foo()
No começo, isso me pareceu um pouco complicado, até que me ocorreu que não havia razão para o Python ter new
, porque tudo é um objeto, então não há necessidade de desambiguar as várias sintaxes dos construtores.
Mas então eu pensei - qual é realmente o sentido disso new
em Java? Por que deveríamos dizer Object o = new Object();
? Por que não apenas Object o = Object();
? No C ++, há definitivamente uma necessidade new
, pois precisamos distinguir entre alocar na pilha e alocar na pilha, mas em Java todos os objetos são construídos na pilha, então por que ter a new
palavra - chave? A mesma pergunta pode ser feita para Javascript. Em C #, com o qual estou muito menos familiarizado, acho que new
pode ter algum objetivo em termos de distinguir entre tipos de objeto e tipos de valor, mas não tenho certeza.
Independentemente disso, parece-me que muitas linguagens que vieram depois do C ++ simplesmente "herdaram" a new
palavra-chave - sem realmente precisar dela. É quase como uma palavra-chave vestigial . Parece que não precisamos dele por nenhum motivo, e ainda está lá.
Pergunta: Estou correto sobre isso? Ou existe algum motivo convincente que new
precisa estar em linguagens gerenciadas por memória inspiradas em C ++, como Java, Javascript e C #, mas não Python?
f
não escapar da função, aloque espaço na pilha.
f
quando a função envolvente retornar.
new
palavra - chave? Claro que quero criar uma nova variável, compilador estúpido! A boa linguagem seria, em minha opinião tem uma sintaxe comof = heap Foo()
,f = auto Foo()
.