Java ilk kez tasarlandığında anonim işlevlerin dışarıda bırakılması uygun görülmüştür. İki sebep düşünebilirim (ancak resmi olanlardan farklı olabilirler):
- Java, işlevleri olmayan bir nesne yönelimli dil olarak tasarlanmıştır, bu nedenle işlevsiz bir dilde anonim işlevlere sahip olmak çok doğal değildi. Ya da en azından bu, dilin tasarımını çok etkilerdi.
- Anonim işlevler, Java'nın çekmek istediği programcı topluluklarında popüler değildi (C, C ++, Pascal?). Şimdi bile, birçok Java programcısı bu özellikleri oldukça egzotik buluyor gibi görünüyor (ancak bu muhtemelen Java 8 ile çok hızlı değişecektir).
İlerleyen yıllarda, Robert Harvey'in açıkladığı gibi, Sun'ın politikası her zaman Java'yı geriye dönük olarak uyumlu ve çok kararlı tutmaktı.
Öte yandan, diğer rakip diller ortaya çıkmıştır (en önemlisi, Java klonu olarak doğan ve daha sonra kendi geliştirme yönünü alan C #).
Rakip diller Java'yı iki nedenden dolayı baskı altına aldı:
Etkileyici güç
Yeni özellikler, belirli programlama deyimlerinin yazılmasını kolaylaştırarak dili programcılar için daha çekici hale getirebilir. Normalde bir dil tarafından sağlanan özellikler kümesi, ifade gücü, dil karmaşıklığı, tasarım tutarlılığı arasında bir uzlaşmadır: daha fazla özellik eklemek, bir dili daha etkileyici ama aynı zamanda daha karmaşık ve ustalaşması zor hale getirir.
Her neyse, son birkaç yıldır Java'nın rakipleri Java'nın sahip olmadığı birçok yeni özellik ekledi ve bu bir avantaj olarak düşünülebilir.
yutturmaca
Evet, maalesef bu, teknoloji seçiminde bir faktör, en azından günlük deneyimimde bir programcı olarak görebildiğim kadarıyla: ekibin çoğu üyesi nasıl kullanılacağını bilmese bile, bir aracın belirli bir özelliği olmalı ve Bunu kullanabilenlerin çoğu zaman buna ihtiyacı yoktur.
Hype, belirli bir proje için platforma karar veren yöneticiler gibi teknik olmayan insanlar için daha da önemli olabilir. Yöneticiler bazen sadece lambda, paralellik, çok çekirdekli, fonksiyonel programlama, bulut bilişim gibi bazı anahtar kelimeleri hatırlar ... Eğer seçim teknolojimizin listenin her bir öğesinde yeşil bir işaret varsa, o zaman günceliz.
Yani IMO bir süredir Java arasında
- dil istikrarı ve tasarım sadeliğinin orijinal politikası, bir yandan büyük bir kod tabanı ve geliştirici topluluğu ve
- Java programcılarını, önce C # ve sonra Scala, Clojure, F # çekebilecek rakip dillerin baskısı (farkında olduğumları adlandırıyorum, başkaları olabilir).
Sonunda Oracle, Java'yı daha rekabetçi hale getirmek için yükseltmeye karar verdi. Bence, yeni özellikler özellikle C # 'a geçmeye cazip gelebilecek ve Scala ve Clojure gibi diğer dilleri Java'dan çok farklı gören Java programcılarına hitap ediyor. Öte yandan, fonksiyonel programlama konusunda deneyim sahibi olan ve hala JVM'yi kullanmak isteyen geliştiriciler muhtemelen Scala, Clojure veya başka bir dile geçmiştir.
Bu yüzden yeni Java 8 özellikleri Java'yı bir dil olarak daha güçlü hale getirecek ve beyan edilen odak eşzamanlı ve paralel programlama olacak, ancak yükseltme, pazarlama yönlerini de ele alıyor gibi görünüyor (Oracle Java'nın baş mimarı Mark Reinhold, "Bazıları Lambda ifadelerinin eklenmesi sadece havalı çocuklara ayak uydurmaktır ve bununla ilgili bazı gerçekler vardır, ancak asıl sebep çok çekirdekli işlemcilerdir; bunları ele almanın en iyi yolu Lambda'dır ", bu makaleye bakın ).
Yani, evet, birçok (hepsi) Java 8 özelliği zaten iyi biliniyordu, ancak bir dile bir özellik eklendiğinde neden ve ne zaman pek çok faktöre bağlıdır: hedef kitle, mevcut topluluk, mevcut kod tabanı, rakipler, pazarlama vb.
DÜZENLE
"... SIC'deki (1996) akışları okumuştum" ile ilgili kısa bir not: akışları uygulamak için Java 8 lambdas'a ihtiyacınız mı var? Aslında bunları isimsiz iç sınıflar kullanarak uygulayabilirsiniz.