Jadi saya sedang mengkode proyek pertama saya di C ++ dan tampaknya butuh lebih banyak upaya untuk membuat kode "bersih", daripada hanya bekerja. Ie tampaknya seolah-olah C ++ "memungkinkan" untuk menulis kode jelek, tetapi bekerja.
Yang membuat saya berpikir,
Bisakah bahasa pemrograman memberlakukan kode bersih dengan desain? Apakah sudah ada bahasa seperti itu?
Juga, bagaimana ini dimasukkan sebagai prinsip desain dalam pengembangan / teori bahasa pemrograman? Apa jenis tindakan yang digunakan?
Jawaban:
Efek utama yang dimiliki desain bahasa pada "kode bersih" adalah pada tingkat sintaksis. Bahasa dengan banyak singkatan dan operator yang tidak jelas (Perl / APL) memberikan kode "kotor", sedangkan bahasa dengan elemen yang lebih kecil (katakanlah, Python) cocok untuk kode yang lebih bersih.
Semantik, bagaimanapun, adalah binatang yang sangat berbeda. Tidak ada cara untuk menegakkan bahwa semantik bahasa digunakan dengan cara yang bersih, terutama karena Anda tidak bisa, sebagai kompiler, tahu apa yang ingin dicapai oleh pengguna bahasa. Alat yang ampuh adalah alat - alat yang kuat, baik atau buruk.
Pada akhirnya, semantik lebih penting daripada sintaksis. Ini juga merupakan bagian yang paling sulit untuk dipikirkan sebagai pengembang pemeliharaan (mis. "Apa sebenarnya arti kode ini? Saya mengerti apa fungsinya ...").
Akibatnya, saya akan mengatakan bahwa tidak ada desain untuk menegakkan kode bersih, tetapi Anda dapat menulis sintaksis sederhana dengan semantik bersih yang membuatnya lebih mudah. Baik atau buruk, kode bersih terutama adalah masalah pengetahuan, motivasi, disiplin, dan keterampilan pengembang.
sumber
Bahasa dapat memaksa atau mendorong programmer untuk mengatasi kelas bug tertentu, yang merupakan bagian dari definisi kode bersih. Misalnya, berbagai bahasa melakukan pekerjaan yang relatif baik untuk mengatasi:
Itu hanya membuat Anda menjadi bagian dari perjalanan ke sana, karena kode bersih terutama tentang komunikasi manusia ke manusia . Bahasa pemrograman benar-benar hanya memiliki satu tuas untuk membantu dalam hal ini, dan itulah kekuatan ekspresif mereka . Itu istilah yang sangat sulit untuk didefinisikan, tetapi pada dasarnya lebih mudah bagi programmer yang baik untuk menulis kode bersih dalam bahasa yang lebih ekspresif. Mereka memiliki lebih banyak alat yang tersedia untuk mengekspresikan algoritma dengan mudah dalam hal yang berkomunikasi dengan baik dengan manusia lain. Jangan salah, Anda dapat menulis kode bersih di ( hampir ) bahasa pemrograman apa pun. Hanya saja beberapa bahasa membuatnya lebih mudah, dan memiliki hasil relatif yang lebih baik.
Namun, Anda tidak bisa begitu saja membuka ekspresivitas dan secara ajaib orang akan mulai menulis kode yang lebih baik. Dengan sebagian besar programmer, Anda memberi mereka lebih banyak tombol untuk mengubah bahasa mereka, dan mereka tidak akan tahu cara menggunakannya dengan benar, sehingga kode mereka berakhir lebih buruk. Dibutuhkan disiplin dan bimbingan yang baik untuk meningkatkan kualitas kode Anda. Tidak ada peluru perak.
sumber
Sampai batas tertentu. Banyak bahasa yang sengaja dirancang untuk mendorong beberapa bentuk kode bersih sesuai dengan cita-cita perancang bahasa. Tentu saja mungkin untuk menulis kode yang jelek dan tidak dapat dipahami dalam bahasa apa pun, tetapi beberapa bahasa memang lebih berupaya untuk mencegahnya.
Sebagai contoh Python memaksa Anda untuk membuat indentasi blok sesuai dengan struktur semantik bahasa, sementara banyak bahasa lain memungkinkan Anda untuk indentasi secara acak atau tidak sama sekali. Ini adalah contoh bahasa yang secara aktif mendorong cita-cita kebersihan tertentu.
sumber
Jika Anda bisa mengukurnya, Anda bisa membuat bahasa yang bisa mengoptimalkannya.
Meskipun saya tidak tahu bahasa tertentu yang benar-benar memberlakukan kebijakan "kode bersih", polisi gaya yang berjalan pada build cukup umum.
Alasan utama bahwa ini adalah langkah terpisah dari dimasukkan ke dalam bahasa sebagian besar adalah fungsi prioritas. Ini demi kepentingan terbaik dari bahasa pemrograman untuk memungkinkan fleksibilitas yang paling besar bagi programmer untuk mendapatkan tingkat adopsi yang paling luas. Ada begitu banyak bahasa pemrograman dan DSL yang berbeda yang membatasi basis pengguna secara artifisial dengan menjadi pemilih dan berpendapat tentang input apa yang diperbolehkan kemungkinan akan menghalangi adopsi yang lebih luas.
Misalnya, bukan kepentingan terbaik C # untuk memaksa orang menulis
dari pada
Tapi checker gaya dapat dianggap pemilih karena itulah yang dirancang untuk mereka lakukan.
Jadi, untuk menjawab pertanyaan
penekanan milikku
Tentu saja, selama Anda memberikan definisi yang kuat untuk arti "kode bersih".
Sebagai contoh, saya mungkin mendefinisikan "kode bersih" yang berarti:
dan Anda mungkin tidak setuju dengan beberapa atau semua konvensi ini, tetapi pada akhirnya konvensi ini dapat diukur dan dapat ditegakkan secara terprogram.
sumber
Tidak, tidak dalam arti yang Anda gambarkan. Mendeteksi "keburukan" tidak dapat dilakukan secara otomatis!
Namun, perancang bahasa dapat melakukan hal-hal untuk mendorong kode yang baik (saya tidak ingin mengatakan "bersih" karena kadang-kadang kode yang baik dan aman juga panjang dan "jelek"). Sebagai contoh, para perancang bahasa Rust memandang hal-hal yang cenderung dilakukan oleh para programmer C ++ (seperti memberikan nilai-nilai yang dialokasikan oleh tumpukan "pemilik" tunggal), dan membuatnya lebih mudah untuk melakukan beberapa hal tersebut. Ini termasuk menyediakan typechecker yang dapat Anda gunakan untuk memeriksa bahwa Anda tidak melakukan kesalahan umum tertentu.
Saya akan mengatakan bahwa desain bahasa yang baik sering reaktif: desainer melihat apa yang dilakukan oleh programmer yang baik dan mencoba untuk membuatnya lebih mudah dan "lebih cantik".
sumber