Apa itu 'kemiringan kode'?

11

Dalam buku O'Reilly tentang Scala, saya membaca bahwa copy-paste kode menciptakan:

... menciptakan masalah kode-gembung, rawatan dan kemiringan ,

Saya tidak dapat melihat definisi kata condong dalam konteks yang jelas. Saya menyadari masalah copy paste, tapi saya tidak bisa membuatnya cocok dengan kata 'miring'. Karena ini digunakan dalam buku O'Reilly, saya rasa ini adalah istilah pemrograman yang nyata yang beredar.

Ada petunjuk?

Joe
sumber

Jawaban:

19

Miring dalam definisi paling tradisionalnya berarti tidak sejajar (tidak paralel). Jelas ketika kode disalin dan ditempelkan dua salinan identik dan paralel. Ini bukan invarian. Perubahan yang dilakukan pada satu salinan tidak dijamin untuk membuatnya ke salinan lainnya (karena kecerobohan atau ketidaktahuan). Sekarang ada dua versi kode yang ada di dua tempat berbeda yang miring (tidak lagi sama). Hal ini dapat menyebabkan bug aneh ketika perilaku tampaknya berfungsi di satu tempat dan tidak di tempat lain. Simpan kode Anda KERING (jangan ulangi sendiri).

EDIT / TAMBAHAN: Jika Anda memiliki keinginan untuk menyalin dan menempel, kemungkinan besar apa yang harus Anda lakukan adalah abstrak kode yang Anda salin ke dalam superclass bersama (berorientasi objek) atau semacam fungsi utilitas yang disertakan (fungsional).

Patrick James McDougle
sumber
+1 untuk penjelasan yang bagus. Juga untuk beberapa katarsis - saya harus berurusan dengan basis kode yang terdiri dari ratusan dan ratusan baris kode copy-paste dengan masalah seperti ini, yang perlu diperbaiki.
KChaloux
2

Pernah memainkan game Telephone sebagai anak-anak? Anda tahu, di mana setiap orang membisikkan frasa ke orang berikutnya dalam barisan dan pada akhirnya, orang terakhir mengatakan frasa itu keras-keras dan semua orang menertawakan betapa berbedanya frasa itu dari yang asli? Itu miring. Saat Anda menyalin dan menempelkan kode, Anda pasti akan membuat perubahan kecil dalam satu atau lebih salinan. Dan semakin sering Anda menyalin dan menempelkan kode yang sama, semakin banyak perubahan yang terjadi dan kode tersebut akan miring dari aslinya. Saya telah melihat kode dengan ratusan salinan dan blok yang disisipkan, masing-masing berbeda satu sama lain hanya dengan beberapa karakter, hampir tidak mungkin dipertahankan. Jika Anda ingin memotong dan menempelkan bagian kode, Anda mungkin setidaknya harus mempertimbangkan untuk memasukkannya ke dalam fungsinya sendiri.

Jim Nutt
sumber
3
Perbedaannya bukan disebabkan oleh copy-and-paste. Mereka disebabkan apa yang terjadi setelah salin dan tempel.
Stephen C
1
Cukup benar, tetapi jika kode tidak disalin dan ditempelkan, perbedaannya tidak akan terjadi.
Jim Nutt
Ini adalah contoh yang baik, tetapi analogi ini miring dari konsep. Dalam analogi, tempel membuat salinan yang berbeda, sedangkan dalam konsep yang sebenarnya, salinan itu sama, tetapi tidak disinkronkan, karenanya menyebabkan kemiringan.
Sundeep