Saya baru saja membaca salah satu artikel Joel di mana dia berkata:
Secara umum, saya harus mengakui bahwa saya sedikit takut dengan fitur bahasa yang menyembunyikan banyak hal . Ketika Anda melihat kode
i = j * 5;
... di C Anda tahu, setidaknya, bahwa j dikalikan lima dan hasilnya disimpan di i.
Tetapi jika Anda melihat potongan kode yang sama di C ++, Anda tidak tahu apa-apa. Tidak ada. Satu-satunya cara untuk mengetahui apa yang sebenarnya terjadi di C ++ adalah untuk mengetahui apa tipe i dan j, sesuatu yang mungkin dinyatakan di tempat lain. Itu karena saya mungkin tipe yang
operator*
kelebihan beban dan melakukan sesuatu yang sangat lucu ketika Anda mencoba melipatgandakannya.
(Menekankan milikku.) Takut fitur bahasa yang menyembunyikan sesuatu? Bagaimana Anda bisa takut akan hal itu? Bukankah menyembunyikan sesuatu (juga dikenal sebagai abstraksi ) adalah salah satu ide kunci pemrograman berorientasi objek? Setiap kali Anda memanggil metode a.foo(b)
, Anda tidak tahu apa yang mungkin dilakukan. Anda harus mencari tahu jenis a
dan b
apa, sesuatu yang mungkin dinyatakan di tempat lain. Jadi haruskah kita menyingkirkan pemrograman berorientasi objek, karena menyembunyikan terlalu banyak hal dari programmer?
Dan j * 5
apa bedanya dengan j.multiply(5)
yang Anda mungkin harus menulis dalam bahasa yang tidak mendukung kelebihan operator? Sekali lagi, Anda harus mencari tahu jenis j
dan mengintip ke dalam multiply
metode, karena lihatlah, j
mungkin dari jenis yang memiliki multiply
metode yang melakukan sesuatu yang sangat cerdas.
"Muahaha, aku seorang programmer jahat yang menyebutkan metode multiply
, tetapi apa yang sebenarnya dilakukannya benar-benar tidak jelas dan tidak intuitif dan sama sekali tidak ada hubungannya dengan mengalikan hal-hal." Apakah itu skenario yang harus kita pertimbangkan ketika merancang bahasa pemrograman? Maka kita harus meninggalkan pengidentifikasi dari bahasa pemrograman dengan alasan bahwa mereka mungkin menyesatkan!
Jika Anda ingin tahu apa yang dilakukan metode, Anda dapat melihat dokumentasi atau mengintip ke dalam implementasi. Kelebihan operator hanya gula sintaksis, dan saya tidak melihat bagaimana itu mengubah permainan sama sekali.
Tolong beri tahu saya.