Bisakah bahasa pemrograman dengan desain menegakkan "kode bersih"? [Tutup]

19

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?

mavavilj
sumber
14
Banyak bahasa telah mencoba. Tidak ada yang berhasil menurut saya.
Gort the Robot
5
Sayangnya ini sepenuhnya berdasarkan opini karena tidak ada definisi objektif "kode bersih". Jangan ragu untuk membahasnya di ruang obrolan kami , saya yakin semua orang di sana akan memiliki beberapa pendapat untuk dibagikan.
Ixrec
9
Tidak, Anda dapat menulis FORTRAN dalam bahasa apa pun.
whatsisname
4
Anda bertanya apakah mungkin untuk membodohi bahasa idiot. Seperti yang mereka katakan, para idiot itu cerdik .
Gort the Robot
2
Apa karakteristik yang dimiliki "kode bersih" untuk keperluan pertanyaan ini? Anda perlu mendefinisikan itu, jika tidak, jawaban apa pun dengan justifikasi apa pun bisa valid.
Theodoros Chatzigiannakis

Jawaban:

20

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.

Michael
sumber
2
Saya akan mengatakan sistem tipe bisa pergi jauh ke arah menegakkan semantik yang benar. Misalnya, bahasa yang diketik dengan kuat memastikan bahwa variabel diberi nilai dari tipe yang berlaku. Bahasa yang membuat jenis menjadi murah dan mudah mendorong penyandian lebih banyak jenis semantik. Bahasa yang sangat diketik membuat pemrogram menyatakan niat tentang konversi jenis. Bahasa yang mengaburkan semantik dengan boilerplate juga mempersulit pemikiran tentang semantik. Sekarang untuk apa semantik "bersih" itu, tidak jelas. Tapi saya akan membayangkan itu memiliki tumpang tindih yang signifikan dengan semantik yang benar.
Pasang kembali Monica
7

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:

  • Pengecualian penunjuk kosong.
  • Bug status bersama.
  • Masalah konkurensi.
  • Pengecualian tidak dicentang.

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.

Karl Bielefeldt
sumber
6

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.

JacquesB
sumber
3

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

if (condition)
{

dari pada

if (condition) {

Tapi checker gaya dapat dianggap pemilih karena itulah yang dirancang untuk mereka lakukan.

Jadi, untuk menjawab pertanyaan

Bisakah bahasa pemrograman memberlakukan kode bersih dengan desain?

penekanan milikku

Tentu saja, selama Anda memberikan definisi yang kuat untuk arti "kode bersih".

Sebagai contoh, saya mungkin mendefinisikan "kode bersih" yang berarti:

  • panjang garis tidak lebih dari 80 karakter
  • fungsi terdiri dari tidak lebih dari 100 baris
  • lekukan harus dua spasi
  • kurung kurawal terbuka harus mengikuti di ujung garis didahului oleh tepat satu ruang
  • tidak lebih dari dua operator per saluran

dan Anda mungkin tidak setuju dengan beberapa atau semua konvensi ini, tetapi pada akhirnya konvensi ini dapat diukur dan dapat ditegakkan secara terprogram.

zzzzBov
sumber
1

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".

Paul Stansifer
sumber