new
Java, JavaScript ve C # gibi dillerde kelime bir sınıfın yeni bir örneğini oluşturur.
Bu sözdiziminin new
özellikle öbek üzerinde bir sınıfın yeni bir örneğini ayırmak ve yeni örneğe bir işaretçi döndürmek için kullanılan C ++ 'dan miras alınmış gibi görünüyor . C ++ 'da, nesne oluşturmanın tek yolu bu değildir. Ayrıca, yığın kullanmadan da bir nesne oluşturabilirsiniz new
- ve aslında, bu nesne oluşturma yöntemi C ++ 'da çok daha yaygındır.
Böylece, bir C ++ arkaplanından geliyorsanız, new
Java, Javascript ve C # gibi dillerde anahtar kelime bana doğal geliyordu. Sonra new
anahtar kelimesi olmayan Python'u öğrenmeye başladım . Python'da, bir örnek basitçe yapıcıyı çağırarak inşa edilir, örneğin:
f = Foo()
İlk başta, bu biraz aklıma geldi, aklıma gelene kadar Python'un bir nedeni olmadı new
, çünkü her şey bir nesneydi, bu yüzden her şey çeşitli yapıcı sözdizimleri arasında karartmaya gerek kalmadı.
Ama sonra düşündüm - new
Java'nın gerçekte ne anlamı var ? Neden demeliyim Object o = new Object();
? Neden sadece değil Object o = Object();
? C ++ 'da kesinlikle bir ihtiyaç var new
, çünkü yığında tahsis etmekle yığında tahsis etmek arasında ayrım yapmak zorundayız, ancak Java'da tüm nesneler öbek üzerinde inşa edilmiş, o zaman neden new
anahtar kelimeye bile sahipsin ? Aynı soru Javascript için de istenebilir. Daha az aşina olduğum C # 'da, new
nesne türleri ile değer türleri arasında ayrım yapmada bazı amaçları olabileceğini düşünüyorum , ancak emin değilim.
Her şeye rağmen, C ++ 'dan sonra gelen birçok dilin new
anahtar kelimeyi gerçekten "gerek kalmadan " aldığını düşünüyorum. Neredeyse vestigial bir anahtar kelime gibi . Herhangi bir sebepten dolayı ihtiyacımız yok gibi görünüyor, ama yine de orada.
Soru: Bu konuda doğru muyum? Ya da new
Java, Javascript ve C # gibi ama Python değil C ++ 'dan ilham alan bellekle yönetilen dillerde olması gereken zorlayıcı bir neden var mı?
f
, işlevden kaçmadığı zaman , yığın alanı tahsis et.
f
, kapatma işlevi döndüğünde GC'nin nesne toplayabileceğini kanıtlamaktan ibarettir.
new
anahtar kelimeye sahip olduğudur. Elbette yeni bir değişken, aptal derleyici yaratmak istiyorum! Bir iyi dil Bence böyle bir sözdizimi olurduf = heap Foo()
,f = auto Foo()
.