Kata newkunci dalam bahasa seperti Java, Javascript, dan C # menciptakan instance baru dari sebuah kelas.
Sintaks ini tampaknya telah diwarisi dari C ++, di mana newdigunakan 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 ++, newkata kunci dalam bahasa seperti Java, Javascript, dan C # tampak alami dan jelas bagi saya. Kemudian saya mulai belajar Python, yang tidak memiliki newkata 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 newdi 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 newkata kunci? Pertanyaan yang sama bisa ditanyakan untuk Javascript. Dalam C #, yang saya tidak terlalu kenal, saya pikir newmungkin 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" newkata 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 newperlu ada di C ++ - bahasa yang dikelola dengan memori yang diinspirasi seperti Java, Javascript dan C # tetapi tidak Python?
ftidak luput dari fungsinya, alokasikan ruang stack.
fketika fungsi melampirkan kembali.
newkata kunci. Tentu saja saya ingin membuat variabel baru, kompiler bodoh! Sebuah baik bahasa akan menurut saya memiliki sintaks sepertif = heap Foo(),f = auto Foo().