Kata new
kunci dalam bahasa seperti Java, Javascript, dan C # menciptakan instance baru dari sebuah kelas.
Sintaks ini tampaknya telah diwarisi dari C ++, di mana new
digunakan secara khusus untuk mengalokasikan instance baru dari kelas di heap, dan mengembalikan pointer ke instance baru. Dalam C ++, ini bukan satu-satunya cara untuk membangun objek. Anda juga dapat membuat objek di stack, tanpa menggunakan new
- dan pada kenyataannya, cara membangun objek ini jauh lebih umum di C ++.
Jadi, berasal dari latar belakang C ++, new
kata kunci dalam bahasa seperti Java, Javascript, dan C # tampak alami dan jelas bagi saya. Kemudian saya mulai belajar Python, yang tidak memiliki new
kata kunci. Dalam Python, sebuah instance dibangun hanya dengan memanggil konstruktor, seperti:
f = Foo()
Pada awalnya, ini terasa agak aneh bagi saya, sampai terlintas di benak saya bahwa tidak ada alasan bagi Python untuk memilikinya new
, karena semuanya adalah sebuah objek sehingga tidak perlu disatukan antara berbagai sintaks konstruktor.
Tapi kemudian saya berpikir - apa gunanya new
di Jawa? Kenapa kita harus bilang Object o = new Object();
? Kenapa tidak adil Object o = Object();
? Dalam C ++ pasti ada kebutuhan new
, karena kita perlu membedakan antara mengalokasikan di heap dan mengalokasikan di stack, tetapi di Jawa semua objek dibangun di heap, jadi mengapa bahkan memiliki new
kata kunci? Pertanyaan yang sama bisa ditanyakan untuk Javascript. Dalam C #, yang saya tidak terlalu kenal, saya pikir new
mungkin memiliki beberapa tujuan dalam hal membedakan antara tipe objek dan tipe nilai, tapi saya tidak yakin.
Bagaimanapun, menurut saya banyak bahasa yang muncul setelah C ++ hanya "mewarisi" new
kata kunci - tanpa benar-benar membutuhkannya. Ini hampir seperti kata kunci peninggalan . Kami tampaknya tidak membutuhkannya untuk alasan apa pun, namun itu ada di sana.
Pertanyaan: Apakah saya benar tentang ini? Atau ada beberapa alasan kuat yang new
perlu ada di C ++ - bahasa yang dikelola dengan memori yang diinspirasi seperti Java, Javascript dan C # tetapi tidak Python?
f
tidak luput dari fungsinya, alokasikan ruang stack.
f
ketika fungsi melampirkan kembali.
new
kata kunci. Tentu saja saya ingin membuat variabel baru, kompiler bodoh! Sebuah baik bahasa akan menurut saya memiliki sintaks sepertif = heap Foo()
,f = auto Foo()
.