Ketika Java pertama kali dirancang, dianggap tepat untuk mengabaikan fungsi anonim. Saya dapat memikirkan dua alasan (tetapi mereka mungkin berbeda dari yang resmi):
- Java dirancang sebagai bahasa berorientasi objek tanpa fungsi, jadi tidak wajar jika memiliki fungsi anonim dalam bahasa tanpa fungsi. Atau setidaknya, ini akan banyak mempengaruhi desain bahasa.
- Fungsi anonim tidak populer di komunitas programmer yang dimaksudkan untuk menarik Java (C, C ++, Pascal?). Bahkan sekarang, banyak programmer Java tampaknya menganggap fitur-fitur ini cukup eksotis (tetapi ini mungkin akan berubah sangat cepat dengan Java 8).
Pada tahun-tahun berikutnya, seperti yang dijelaskan Robert Harvey, kebijakan Sun adalah selalu menjaga Jawa tetap kompatibel dan sangat stabil.
Di sisi lain, bahasa lain yang bersaing telah muncul (yang paling penting adalah C #, yang lahir sebagai klon Jawa dan kemudian mengambil arah pengembangannya sendiri).
Bahasa yang bersaing telah menempatkan Jawa di bawah tekanan karena dua alasan:
Kekuatan ekspresif
Fitur-fitur baru dapat membuat idiom pemrograman tertentu lebih mudah untuk ditulis, membuat bahasa lebih menarik bagi programmer. Biasanya set fitur yang disediakan oleh bahasa adalah kompromi antara kekuatan ekspresif, kompleksitas bahasa, koherensi desain: menambahkan lebih banyak fitur membuat bahasa lebih ekspresif tetapi juga lebih kompleks dan sulit untuk dikuasai.
Bagaimanapun, dalam beberapa tahun terakhir pesaing Java menambahkan banyak fitur baru yang tidak dimiliki Java, dan ini dapat dianggap sebagai keuntungan.
Hype
Ya, sayangnya ini adalah faktor dalam pilihan teknologi, setidaknya dari apa yang dapat saya lihat dalam pengalaman sehari-hari saya sebagai seorang programmer: alat harus memiliki fitur tertentu, bahkan jika sebagian besar anggota tim tidak tahu cara menggunakannya dan mereka yang dapat menggunakannya tidak sering membutuhkannya.
Hype dapat menjadi lebih penting bagi orang-orang non teknis seperti manajer, yang mungkin menjadi orang yang menentukan platform untuk proyek tertentu. Manajer terkadang hanya mengingat beberapa kata kunci seperti lambda, paralelisme, multicore, pemrograman fungsional, komputasi awan, ... Jika teknologi pilihan kami memiliki tanda hijau pada setiap item dalam daftar, maka kami terkini.
Jadi IMO untuk beberapa waktu Java telah terjebak di antara
- kebijakan asli stabilitas bahasa dan kesederhanaan desain, basis kode besar dan komunitas pengembang di satu sisi, dan
- tekanan bahasa yang bersaing yang dapat menarik programmer Java, C # pada awalnya, dan kemudian Scala, Clojure, F # (Saya beri nama yang saya tahu, mungkin ada yang lain).
Akhirnya Oracle memutuskan untuk memutakhirkan Java agar lebih kompetitif. Menurut pendapat saya, fitur-fitur baru membahas terutama programmer Java yang mungkin tergoda untuk beralih ke C # dan yang melihat bahasa lain seperti Scala dan Clojure terlalu berbeda dari Jawa. Di sisi lain, pengembang yang memiliki pengalaman dengan pemrograman fungsional dan masih ingin menggunakan JVM mungkin sudah beralih ke Scala, Clojure, atau bahasa lain.
Jadi fitur Java 8 yang baru akan membuat Java lebih kuat sebagai bahasa dan fokus yang dinyatakan adalah pemrograman bersamaan dan paralel, tetapi upgrade tersebut tampaknya juga mencakup aspek pemasaran (Mark Reinhold, kepala arsitek Java di Oracle, mengatakan: "Beberapa orang akan mengatakan menambahkan ekspresi Lambda hanya untuk bersaing dengan anak-anak keren, dan ada beberapa kebenaran di dalamnya, tetapi alasan sebenarnya adalah prosesor multicore; cara terbaik untuk menanganinya adalah dengan Lambda ", lihat artikel ini ).
Jadi, ya, banyak (semua) fitur Java 8 sudah terkenal, tetapi mengapa dan kapan fitur ditambahkan ke bahasa tergantung pada banyak faktor: audiens target, komunitas yang ada, basis kode yang ada, pesaing, pemasaran, dll.
EDIT
Catatan singkat tentang "... Saya telah membaca tentang stream di SIC (1996).": Apakah Anda bermaksud bahwa Anda memerlukan Java 8 lambdas untuk mengimplementasikan stream? Sebenarnya Anda bisa menerapkannya menggunakan kelas dalam anonim.