Salah satu fitur yang diusulkan untuk "Project Coin" Java 7 adalah "operator Elvis". Sebuah laporan dari presentasi 2009 JavaOne di Proyek Coin menggambarkannya seperti:
Salah satu "fitur kecil" yang tercakup dalam presentasi ini adalah apa yang disebut "operator Elvis," versi yang lebih ringkas dari operator ternary. Saya menemukan diri saya kehilangan beberapa fitur Groovy ketika menggunakan Java tradisional dan ini akan menjadi salah satu operator yang dapat saya gunakan dalam kedua bahasa jika ditambahkan. Operator "Elvis" berguna untuk menentukan nilai default yang dapat digunakan ketika ekspresi yang dievaluasi adalah nol. Seperti operator navigasi aman Groovy, ini adalah cara ringkas untuk menentukan cara menghindari null yang tidak perlu. Saya telah membuat blog sebelumnya tentang bagaimana saya ingin menghindari NullPointerException.
Sementara aspek-aspek lain dari Koin Proyek akhirnya dilaksanakan, yang ini tidak. Mengapa Operator Elvis akhirnya ditolak, meskipun telah disajikan di JavaOne sebagai kandidat untuk inklusi?
Untuk lebih jelasnya, saya secara khusus menanyakan tentang operator ini dan alasan penolakannya sebagai bagian dari "Project Coin" Java 7, mengingat bahwa itu dianggap serius saat itu. Saya curiga ada milis atau semacamnya di mana alasan penolakan itu dibahas, tetapi saya tidak dapat menemukan apa pun. Jika ada informasi yang lebih umum tentang mengapa itu tidak termasuk dalam versi Java apa pun, itu dapat diterima tetapi tidak disukai.
sumber
?.
sebagai contoh ) itu pasti akan terlalu luas sebagai pertanyaan biasa, tetapi Anda akan memiliki jawaban yang bagus.Jawaban:
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:
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 :
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.
sumber