Secara alami, orang terbaik untuk mengajukan pertanyaan ini adalah seseorang di Komite Eksekutif JCP, bukan kita. Namun, itu tidak akan mencegah saya terlibat dalam spekulasi kosong.
Jawaban untuk setiap pertanyaan "mengapa fitur ini tidak diterapkan" selalu karena manfaatnya tidak melebihi biaya.
Eric Lippert (mantan anggota tim C #) mengatakan bahwa, agar suatu produk memiliki fitur, fitur itu harus:
- memikirkan di tempat pertama
- diinginkan
- dirancang
- ditentukan
- diimplementasikan
- diuji
- didokumentasikan
- dikirim ke pelanggan
Dengan kata lain, harus ada banyak hal penting yang harus terjadi sebelum fitur bahasa pemrograman baru dapat direalisasikan. Biayanya lebih besar dari yang Anda kira.
Pada tim C #, setiap permintaan fitur baru dimulai dengan skor minus 100. Kemudian tim mengevaluasi manfaat dan biaya, menambahkan poin untuk manfaat, dan mengurangi poin untuk biaya. Jika skor tidak melampaui nol, fitur yang diusulkan akan dibuang. Dengan kata lain, fitur baru harus memberikan manfaat yang menarik.
Tapi Operator Elvis berhasil masuk ke C #. Jadi mengapa tidak membuatnya menjadi Java?
Terlepas dari kesamaan mereka, Java dan C # memiliki filosofi bahasa yang sangat berbeda. Ini dibuktikan oleh fakta bahwa program-program perusahaan Java cenderung besar, koleksi struktural arsitektur. Keringkasan dan ekspresi bahasa dikorbankan di atas altar upacara dan kemudahan pengkodean. Pola arsitektur perangkat lunak yang terkenal yang dapat dikenali oleh semua orang di tim pengembangan lebih disukai daripada kenyamanan bahasa.
Pertimbangkan pertukaran Reddit ini :
Operator Elvis telah diusulkan untuk setiap versi Java sejak 7, dan telah ditolak setiap saat. Bahasa yang berbeda jatuh pada titik yang berbeda di sepanjang spektrum dari "murni" ke "pragmatis", dan bahasa yang mengimplementasikan operator Elvis cenderung lebih jauh ke arah ujung pragmatis spektrum daripada Jawa.
Jika Anda memiliki tim pro Jawa 15+ tahun yang menulis semacam sistem pemrosesan backend yang sangat terdistribusi, sangat konkuren, maka Anda mungkin menginginkan tingkat ketelitian arsitektur yang tinggi.
Namun, jika Anda memiliki tim tingkat menengah ke bawah, setengahnya bermigrasi dari Visual Basic, dan Anda meminta mereka menulis aplikasi web ASP.NET yang sebagian besar hanya melakukan operasi CRUD ... maka mungkin akan sulit untuk merancang banyak dari AbstractFactoryFactory
kelas untuk pergi abstrak kenyataan bahwa Anda tidak memiliki kontrol atas kolom mana yang nullable dalam database menyebalkan warisan yang Anda harus menggunakan.
Perbedaan mendasar dalam filsafat bahasa ini meluas tidak hanya pada cara bahasa digunakan, tetapi juga pada cara proses desain bahasa itu sendiri dilakukan. C # adalah bahasa diktator yang murah hati . Untuk mendapatkan fitur baru ke C #, Anda hanya perlu meyakinkan satu orang: Anders Hejlsberg .
Java mengambil pendekatan yang lebih konservatif. Untuk mendapatkan fitur baru ke Java, itu harus mendapatkan konsensus dari konsorsium vendor besar seperti Oracle, IBM, HP, Fujitsu & Red Hat. Jelas, proses itu akan lebih lambat dan menghadirkan bilah yang lebih tinggi untuk fitur bahasa baru.
Pertanyaan "mengapa fitur x tidak diterapkan ..." selalu secara implisit menyertakan kata-kata, "... jika itu jelas merupakan ide yang bagus?" Seperti yang telah saya tunjukkan secara memadai di sini, pilihannya tidak pernah sesederhana itu.