newJava, 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, newJava, Javascript ve C # gibi dillerde anahtar kelime bana doğal geliyordu. Sonra newanahtar 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 - newJava'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 newanahtar kelimeye bile sahipsin ? Aynı soru Javascript için de istenebilir. Daha az aşina olduğum C # 'da, newnesne 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 newanahtar 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 newJava, 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.
newanahtar 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().