Pedoman Pengkodean: Metode tidak boleh mengandung lebih dari 7 pernyataan?

78

Saya sedang mencari di AvSol Coding Guidelines untuk C # dan saya setuju dengan hampir semuanya tetapi saya benar-benar ingin tahu apa pendapat orang lain tentang satu aturan spesifik.

AV1500

Metode tidak boleh melebihi 7 pernyataan. Metode yang membutuhkan lebih dari 7 pernyataan adalah melakukan terlalu banyak, atau memiliki terlalu banyak tanggung jawab. Itu juga membutuhkan pikiran manusia untuk menganalisis pernyataan yang tepat untuk memahami apa yang dilakukan kode. Hancurkan dalam beberapa metode kecil dan fokus dengan nama yang menjelaskan sendiri.

Apakah sebagian besar dari Anda mengikuti aturan ini? Sekalipun ada sedikit yang bisa diselamatkan dari membuat metode baru (Kode Anda masih KERING ) selain sangat mudah dibaca? Dan apakah nomor Anda masih serendah 7? Saya akan cenderung lebih ke 10.

Saya tidak mengatakan saya melanggar aturan ini di semua tempat - sebaliknya, metode saya 95% kecil dan fokus tetapi mengatakan Anda tidak boleh melanggar aturan ini benar-benar membuat saya terkejut.

Saya benar-benar hanya ingin tahu apa yang orang pikirkan tentang TIDAK PERNAH melanggar aturan ini (ini adalah '1' pada standar pengkodean - artinya TIDAK PERNAH melakukan ini). Tapi saya pikir Anda akan kesulitan menemukan basis kode yang tidak.

brian
sumber
48
Apakah mereka menghitung casepernyataan dalam menghanguskan switchjuga? Bagaimanapun, itu hanyalah persyaratan bodoh, tidak berguna. Mereka yang menulisnya tidak tahu apa-apa tentang pemrograman.
SK-logic
86
Satu-satunya aturan yang seharusnya menjadi '1' pada standar pengkodean adalah aturan "kamu harus mengambil semua pedoman pengkodean dengan sebutir garam."
Mike Nakis
6
@ SK-logic 1027 juga tidak buruk - itu pasti menyenangkan menulis kode yang harus menangani data yang hilang, jika Anda harus memperlakukan string kosong sama dengan string nol.
quant_dev
25
Saat membaca panduan ini, saya berharap melihat basis kode penuh: void DoSomething () {DoSomethingFirstSevenLines (); DoSomethingSecondSevenLines (); DoSomethingThirdSevenLines (); dll; }
kapal tunda
12
Coba renungkan sebagian besar .NET Framework dan lihat berapa banyak metode yang memiliki kurang dari 7 pernyataan ...
David Boike

Jawaban:

195

Ini adalah "bau standar" bagi saya. Setiap kali saya melihat standar pengkodean dengan batasan spesifik di dalamnya, saya khawatir. Anda hampir selalu mengalami kasus di mana metode harus lebih besar dari yang dibolehkan standar (apakah itu panjang / jumlah garis, jumlah variabel, jumlah titik keluar, dll). Standar harus lebih seperti pedoman, dan memungkinkan kelonggaran yang cukup untuk melakukan penilaian yang baik. Jangan salah paham, ada baiknya memiliki standar, tetapi seharusnya tidak menjadi "manajemen mikro dengan proxy".

TMN
sumber
25
+1 untuk "manajemen mikro dengan proxy." Saya menduga bahwa seseorang membaca tentang aturan "7 plus atau minus 2" ( en.wikipedia.org/wiki/... ) dan mengacaukan retensi fakta jangka pendek dengan penyimpanan jangka panjang seperti, Anda tahu, editor kode.
lembut
25
Standar apa pun yang dipikirkan secara bijaksana melarang angka ajaib dalam kode, kan? Anda akan berpikir bahwa standar pengkodean juga berlaku untuk standar itu. Angka 7 pasti memiliki kualitas "sihir" yang pasti.
Adam Crossland
2
Jawaban Anda akan lebih masuk akal jika judul dokumen tidak "Coding Guidlinesuntuk C # 3.0 dan 4.0.
Andy
+1 Dalam pikiran saya satu-satunya alasan Anda harus mengikuti standar pengkodean adalah tidak pernah mengikuti nomor yang sewenang-wenang secara dogmatis, tetapi untuk memastikan Anda tidak menyebabkan masalah penggabungan yang tidak perlu dalam kontrol versi (yaitu masalah yang terkait saat Anda bekerja dalam tim). Biasanya file yang lebih pendek dan lebih banyak komponen berarti lebih sedikit kemungkinan Anda mengalami masalah ketika Anda menggabungkan perubahan kode.
Spoike
3
Saya mengunduh dokumen ini dan mulai mencari-cari. Dalam 1.6, dinyatakan: "Dokumen itu tidak menyatakan bahwa proyek harus mematuhi pedoman ini, juga tidak mengatakan pedoman mana yang lebih penting daripada yang lain. Namun, kami mendorong proyek untuk memutuskan sendiri pedoman apa yang penting, penyimpangan apa yang akan diproyeksikan oleh proyek. gunakan, siapa konsultan jika timbul keraguan, dan tata letak seperti apa yang harus digunakan untuk kode sumber. " Meskipun 1 berarti "Pedoman yang tidak boleh Anda lewati dan berlaku untuk semua solusi", Anda dapat memilih untuk memodifikasinya.
chrish
83

Biasanya merupakan ide yang baik untuk membagi barang menjadi metode kecil. Tetapi yang penting adalah untuk membagi hal-hal yang masuk akal.

Jika tidak masuk akal untuk dibagi, maka jangan dibagi. Ini sering terjadi pada beberapa prosedur atau kode GUI.

Steve McConnell menyatakan dalam Code Complete bahwa Anda tidak selalu lebih produktif ketika menggunakan metode singkat. Jika Anda membagi ketika itu tidak masuk akal, Anda menambahkan kompleksitas ke kode tanpa manfaat.

Seperti biasa dengan pedoman, ada baiknya untuk mengingat mengapa kendala ada, sehingga Anda bisa belajar ketika itu tidak berlaku. Dalam sebagian besar kode metode akan pendek, atau Anda mungkin memiliki masalah dengan KERING atau pemisahan masalah . Tetapi jika tidak demikian, maka baiklah.

deadalnix
sumber
1
Jawaban yang bagus Dua baris terakhir terutama mengarahkan titik.
Xonatron
6
Saya pikir aturan praktis yang penting adalah memeriksa apakah submethodnya orthogonal. Jika mereka independen, dapat dipanggil dalam urutan apa pun dan menghormati kelas invarian maka lebih baik memisahkan mereka. Jika metode digabungkan secara ketat, pecahkan invarian kelas dan / atau perlu dipanggil dalam urutan tertentu maka mungkin lebih baik untuk menjaga mereka bersama-sama.
hugomg
4
Kode lengkap penuh dengan hal-hal yang baik. Setiap programmer harus memakannya saat makan siang setiap hari.
deadalnix
29

Itu harus dianggap sebagai aturan praktis.

Hal-hal seperti "Tidak lebih dari 80 (100.120) kolom teks", "satu titik keluar per metode", "tidak lebih dari 2 tingkat bersarang", adalah apa yang saya sebut ambang batas untuk indikator bau kode. Jika Anda melanggar mereka kadang-kadang, itu tidak berarti kode itu buruk. Jika Anda mendapati diri Anda melanggar mereka secara konsisten maka ada sesuatu yang berbau dalam kode dan Anda mungkin ingin berhenti sejenak dan memikirkan kembali pendekatan Anda.

Bagi saya, kriteria yang paling penting adalah, "Apakah kode ini dapat dimengerti?", "Apakah ini berulang?", "Apakah dipecah di tempat-tempat yang logis?", "Apakah dipasangkan secara longgar?" Ada beberapa lagi, tetapi saya pikir ide dasar dapat disimpulkan dengan mengingat nasihat Donald Knuth: "Program dimaksudkan untuk dibaca oleh manusia dan hanya secara kebetulan untuk komputer untuk dieksekusi."

seggy
sumber
7
Batas kolom "80/100/120" adalah agar kita dapat membaca kode. Sebagian besar terminal terbuka pada 80 kolom, dan lebih sedikit usaha untuk membuat penulis membungkus menjadi 80 kolom daripada membuat setiap pembaca mengubah ukuran terminal mereka setiap kali mereka ingin membaca kode. Tidak seperti batas lainnya, batas N-kolom tidak mempengaruhi semantik kode, ini adalah aturan gaya murni; dalam kategori yang sama dengan "gunakan tab 4-ruang" atau "beri tanda kurung buka untuk fungsi pada baris mereka sendiri".
Dietrich Epp
4
Memang, ini adalah aspek estetika lebih dari aspek semantik. Namun, di situlah kalimat terakhir saya berlaku. Tidak jarang menemukan pernyataan Java yang melebihi aturan 80 kolom tanpa tempat "bagus" untuk membagi baris. Ini memengaruhi keterbacaan dan pemahaman kode. Ini juga bisa mengindikasikan pelanggaran Hukum Demeter
Seggy
7
Pada abad ke-21, IDE saya memiliki fitur yang disebut "bungkus kata dinamis".
György Andrasek
9
@ GyörgyAndrasek: Tetapi semua orang tidak selalu menggunakan IDE Anda: kami melihat kode di GitHub, di terminal dengan less, di vimdan emacs; dan pembungkus otomatis tampaknya serampangan. Standar pengkodean bukan untuk keuntungan Anda, itu untuk kepentingan orang-orang yang bekerja dalam tim.
Dietrich Epp
2
@DietrichEpp Secara pribadi saya mengalami kesulitan membaca kode yang selalu dibungkus pada kolom 80. Baru-baru ini saya harus mengerjakan proyek Java di mana formatter Eclipse standar digunakan. Dan di dalam metode itu sangat sulit untuk melacak garis yang melewati dua atau bahkan tiga baris (saya menyalahkan pengaturan formatter lain untuk itu juga). Intinya adalah bahwa saya pikir 80 agak ketinggalan jaman. Saya pribadi menggunakan batas 120, buat editor saya mengatur untuk menegakkan itu, memiliki konsol yang lebar 120 kolom dan Github benar-benar menampilkan 125 kolom. Dan saya pikir itu jauh lebih mudah dibaca seperti itu.
aduk
18

Saya tidak pernah meluangkan waktu untuk benar-benar menghitung jumlah pernyataan dalam metode saya, tetapi saya berusaha keras untuk menulis metode yang secara bersih melakukan satu tujuan yang jelas. Selama kode Anda bersih, dapat dibaca, dan mengikuti prinsip KERING dan Tanggung Jawab Tunggal , Anda mungkin telah melakukan pekerjaan Anda. Saya pikir bahwa memisahkan metode secara terpisah hanya untuk menegakkan batas tujuh pernyataan dapat membuat kode Anda kurang dapat dibaca / dipelihara.

Joshua Smith
sumber
1
+1 untuk keterbacaan. Bahkan seharusnya tidak masalah jika suatu metode panjangnya 20, 30 atau bahkan 50 baris. Jika KERING dan SRP adalah tujuan Anda, tidak masalah jika metodenya tampak sedikit di sisi gondrong ... walaupun paling sering Anda akan menemukan bahwa semakin mudah Anda membuat kode, semakin pendek metode Anda secara alami akan menjadi.
S.Robins
11

Ini perkiraan

Aturan seperti ini seharusnya tidak dianggap terlalu harfiah. Mereka bisa mengatakan " metode harus pendek ". Namun, beberapa orang akan menafsirkannya sebagai "kurang dari 1 halaman" dan yang lain sebagai "paling banyak 2 baris."

Saya akan berasumsi bahwa mereka mengatakan "7 pernyataan" untuk memberi Anda ide kasar (meskipun saya pikir mereka seharusnya mengatakan "sekitar 7"). Jika Anda membutuhkan 9 sesekali, jangan berkeringat. Tetapi jika Anda mencapai 20, Anda akan tahu Anda tidak berada di stadion baseball yang tepat untuk aturan ini.

Nathan Long
sumber
Itu membuatnya perkiraan yang cukup eksplisit. Itu ditandai di bawah "Pedoman yang tidak boleh Anda lewati dan harus berlaku untuk semua situasi".
brian
1
@ Brian - mungkin penulis pedoman tidak sengaja menghilangkan kata "kira-kira", atau mungkin mereka adalah tipe diktator gila. Maksud saya adalah bahwa OP harus menganggap ini sebagai angka rata-rata. Aturan apa pun yang tidak dijalankan oleh kompiler atau penerjemah hanyalah saran.
Nathan Long
"Aturan apa pun yang tidak dijalankan oleh kompiler atau penerjemah hanyalah saran" Tidak selalu benar. Saya belum melihat aturan custom resharper atau fxcop dan jika mereka benar-benar menegakkan aturan khusus ini, tetapi ada perusahaan yang memaksa Anda untuk memvalidasi terhadap semua pedoman gaya. Saya telah bertemu orang-orang yang perusahaannya memaksa mereka untuk menulis kode yang dapat melewati pedoman pengkodean Microsoft yang ketat.
brian
Saya setuju ini perkiraan dan harus diambil dengan sebutir garam, memiliki paragraf standar kode memunculkan angka sewenang-wenang pasti akan menyebabkan kebingungan. Sebagian besar waktu standar akan dikeluarkan dari konteks dan "orang" akan mengikuti pendekatan sewenang-wenang itu sebagai dogma.
Spoike
10

7 adalah angka yang sepenuhnya arbitrer dengan sama sekali tidak penting.

Kompleksitas siklomatik adalah masalah yang lebih besar daripada jumlah pernyataan. Saya telah melihat kode yang memiliki 100 pernyataan dalam satu metode (yang saya pikir mengerikan), tetapi memiliki kompleksitas siklomatik 1 dan hanya benar-benar melakukan 1 hal. Hanya ada banyak langkah. Kami membahas memecahnya menjadi metode yang lebih kecil, tetapi metode itu hanya akan dipanggil dengan metode yang satu ini.

Sementara itu adalah kasus yang cukup ekstrim, intinya adalah Anda harus menjaga kode KERING dan kompleksitas siklomatik yang rendah. Itu lebih penting daripada jumlah garis dalam suatu metode.

Ambil pernyataan switch / case misalnya. Jika Anda memiliki lebih dari 7 nilai yang memungkinkan, apakah Anda perlu memecah evaluasi menjadi beberapa metode? Tentu saja tidak, itu konyol.

Memecah kode secara artifisial menjadi lebih banyak metode hanya untuk menjaga jumlah pernyataan di bawah 7 hanya membuat kode Anda lebih buruk.

Pedoman harus: Setiap metode harus melakukan 1 hal dan menjaga kode Anda KERING.

Jim McKeeth
sumber
1
+1: Batas sewenang-wenang hanya berguna secara sewenang-wenang. Suatu metode harus mengandung operasi koheren tunggal pada tingkat abstraksi tunggal. Memecah unit atom seperti itu membuat kode lebih kompleks, membuatnya lebih sulit untuk memahami kode.
Allon Guralnek
KERING dinilai terlalu tinggi. Cukup sering itu berarti menggabungkan dua aspek dari sesuatu yang seharusnya tidak terlalu erat.
Brad Thomas
4

Yah, itu tergantung sedikit. Saya menulis banyak kode yang mengakses database. Kode pelat ketel untuk penanganan pengecualian lebih dari tujuh pernyataan dalam banyak kasus. Saya akan mengatakan pedoman terbaik adalah memastikan fungsi Anda memiliki satu tujuan

Jaydee
sumber
8
Anda tidak dapat mengabstraksi kode boilerplate menjadi metode sendiri?
erjiang
Saya perhatikan setelah memposting bahwa ini adalah C # bukan Java tetapi saya memikirkan hal semacam ini. stackoverflow.com/questions/321418/…
Jaydee
@erjang: kamu bisa. Ini sangat jelek di Jawa, karena Anda harus membungkus setiap kueri dalam kelas anonim, tetapi masih layak dilakukan. Tidak begitu jelek di C #, dan pasti layak dilakukan.
kevin cline
Secara pribadi, saya menemukan beberapa baris tambahan dari kode baris yang kaku agar lebih mudah dibaca. Tapi mungkin itu hanya aku.
Jaydee
@Jaydee Pertanyaan yang ditautkan menunjukkan praktik yang umum tetapi aneh: Membungkus pengecualian dan masuk. Pada level selanjutnya Anda dapat melakukan hal yang sama ... dengan cara ini satu pengecualian muncul beberapa kali dalam log. Akan lebih baik untuk mendeklarasikan metode melempar dan Anda menyimpan 3 baris. Tulis metode pembantu menutup keduanya psdan rsdan simpan yang lain. Atau tulis metode List<Row> readDb(String sql, Object... args)yang mengerjakan seluruh pekerjaan (hanya berfungsi untuk set hasil yang pas di memori, tetapi mengambil terlalu banyak data biasanya menyiratkan bahwa pekerjaan harus dilakukan dalam DB).
maaartinus
4

Semuanya adalah trade-off. Masalah dengan pendekatan yang diusulkan - refactoring ke dalam beberapa metode dan kelas sehingga masing-masing metode pendek - adalah bahwa meskipun karena alasan yang berbeda, itu mengarah pada kode yang tidak dapat dibaca ketika dibawa ke ekstremnya.

Bayangkan sebuah metode foo()yang melakukan 7 hal. Anda mungkin berpendapat bahwa 7 hal terlalu banyak. Mungkin dalam banyak kasus Anda benar. Di sisi lain, 7 hal ini mungkin terkait erat; Logikanya dapat mengalir dengan lancar dan membaca seperti prosa; Anda mungkin tidak kesulitan memahaminya saat Anda benar-benar perlu. Yang mungkin berakhir jauh lebih buruk adalah memiliki 7 hal itu didistribusikan di pohon sumber yang besar, sehingga jika Anda melihat foo()Anda tidak tahu apa yang dilakukannya tanpa melihat di 7 tempat yang berbeda.

Banyak orang mendapatkan aturan seperti ini di kepala mereka, dan hasilnya adalah apa yang saya anggap sebagai spaghetti OO. Semuanya rapi, dikemas dalam metode atau kelas kecilnya sendiri, dengan sedikit transaksi mikro yang terjadi di setiap tempat. Tetapi tidak mungkin untuk mengetahui basis kode seperti itu dan tahu apa yang dilakukannya. Anda menjadi tersesat.

asveikau
sumber
4

itu bukan pedoman yang buruk. Saya tidak pernah menyesal membagi metode dan kelas (saya tidak pernah menemukan saya memiliki terlalu banyak) selama mereka dikelompokkan dan saling terkait dengan cukup baik.

Kuncinya adalah untuk TIDAK membaginya secara vertikal (Hanya mencubit metode pada satu titik dan memulai yang baru). Triknya, seperti halnya dengan pengujian unit, adalah dengan mengingat aturan seperti itu sejak awal sehingga Anda benar-benar mendesain lebih baik, meneruskan 3 atau 4 pernyataan di tengah metode ke metode lain karena memiliki pemanggilan metode menggambarkan apa yang Anda lakukan lebih baik daripada 3 atau 4 pernyataan di tengah-tengah kode Anda.

Pemecahan seperti ini, bahkan jika itu sewenang-wenang dan hanya digunakan sekali, dapat mengarah pada perbaikan yang lebih baik nantinya karena kejelasan kode yang baru, ini berlaku untuk kelas yang lebih kecil juga.

Pikirkan itu seperti Anda akan menguji unit. Jika Anda mencoba menambahkan pengujian unit setelah fakta itu sulit dan kadang-kadang tampaknya mustahil tetapi jika Anda mendesainnya dari awal itu sebenarnya membuat semua kode Anda lebih baik.

Ringkasan? Jika membandingkan aroma desain "Gunakan kurang dari 7 pernyataan" dengan aroma kode "Saya menggunakan lebih dari 7 pernyataan", saya lebih suka menghilangkan bau kode.

Bill K
sumber
4

Wow! Saya tidak pernah berharap menemukan diskusi yang begitu intens tentang pedoman sederhana yang secara kasar mengatakan bahwa metode Anda harus sangat kecil. Karena mereka selalu pengembang yang ingin pedoman mereka menjadi eksplisit, saya memilih 7 karena itu terdengar seperti ambang batas yang bagus.

Beberapa dari Anda telah mengutip penafian di awal dokumen. Tetapi untuk memperjelas, dokumen ini mewakili kumpulan pedoman yang mencoba membantu Anda menulis kode yang lebih baik dan merancang sistem yang lebih baik. Saya tidak pernah menyatakan bahwa apa pun harus menjadi aturan, meskipun pedoman ditandai sebagai level 1. Level tersebut hanyalah pendapat kolektif dari banyak orang yang telah menggunakan dokumen ini untuk sementara waktu.

Saya juga tidak pernah mengaku sebagai ahli. Tapi saya sudah berkecimpung di profesi ini selama 15 tahun sekarang, dengan sekitar 4 tahun pengalaman C ++ dan 11 tahun pengalaman C #. Awalnya didasarkan pada Kekuatan Industri C ++, tapi saya telah memperbaikinya sejak itu dengan masukan dari komunitas.

Apapun, poin yang saya coba sampaikan adalah bahwa Anda harus terus berpikir untuk diri sendiri. Jika menurut Anda pedoman 7 pernyataan itu tidak berguna, daripada hanya membuatnya lebih lama. Heck, saya bahkan melanggar pedoman itu sesekali. Saya hanya melanggarnya dan menerima konsekuensinya.

Dennis Doomen
sumber
3
Baik dari Anda berpadu, dan saya pikir Anda membuat argumen yang masuk akal. Yang mengatakan, saya tidak setuju dengan alasan Anda "mereka selalu pengembang yang ingin pedoman mereka menjadi eksplisit": Anda tidak selalu dapat melayani orang bodoh, dan Anda tidak boleh mencoba. Membuat pedoman eksplisit itu baik asalkan ini tidak membuat mereka salah: sekarang ini tidak lagi menjadi pedoman, itu adalah aturan yang sewenang-wenang. Memperkenalkan angka sewenang-wenang, seperti yang telah Anda saksikan, adalah cara pasti mati untuk ditembak jatuh, dan dibenarkan.
Konrad Rudolph
3

Pertama: itu adalah pedoman, bukan aturan. Itu disebut pedoman, jadi tolong perlakukan itu seperti itu. Ini menyiratkan bahwa penilaian Anda sendiri juga diperlukan (seperti biasa)

Selain itu, saya dapat memikirkan banyak contoh kode yang baik yang tidak mematuhi batasan ini. Meskipun itu hanya panduan, ini adalah pedoman yang buruk.

Dominic Cronin
sumber
2

Saya setuju dengan pernyataan di atas saya. Ini hanya panduan dan di dunia yang sempurna semuanya akan menjadi objek, digunakan kembali dalam setiap program, dan dunia akan menjadi tempat yang indah. Itu tidak selalu benar dan kadang-kadang itu akan menyebabkan banyak overhead atau sumber daya yang terbuang. Anda perlu mengingatnya juga.

Falcon165o
sumber
6
"Saya setuju dengan pernyataan di atas saya" Hindari kalimat seperti ini di situs stackexchange. Ingatlah bahwa urutan jawaban yang diposting belum tentu urutan mereka ditampilkan masuk
Luiscubal
Saya tahu, saya tidak memikirkannya sampai terlambat. Tapi saya masih akan memberi Anda +1 untuk menunjukkan kentut otak saya.
Falcon165o
2

Cukup konyol ketika Anda menambahkan penanganan pengecualian ke dalam campuran.

Setelah "coba, tangkap, akhirnya" Anda dibiarkan dengan empat pernyataan per metode!

Juga pertimbangkan metode "validateForm" untuk formulir 20 bidang, bahkan jika Anda menangani semua validasi individu dalam metode terpisah Anda masih memiliki 20 metode validasi bidang untuk dipanggil. Menurut pedoman ini, Anda akan berakhir dengan beberapa split pointless seperti "validateTopOfScreen", "validateMiddleOfScreen" dan "validateBottomOfScreen".

James Anderson
sumber
Saya pikir cukup aman untuk mengatakan bahwa try/ catch/ finallybukan pernyataan dalam C #. Lihat Ecma-334 § 12.3.3.15 dan bagian sekitarnya. (disingkat) " pernyataan try-catch-akhirnya dari formulir : coba try-block catch (...) catch-block-n akhirnya akhirnya-blok "
sebuah CVn
Yah, seperti yang saya katakan sebelumnya, ini adalah keputusan yang harus Anda buat berulang kali. Namun, contoh khusus Anda mungkin menjadi contoh tidak melakukan desain berorientasi objek dengan benar. Anda mungkin ingin membagi layar menjadi beberapa kontrol yang melakukan validasi sendiri.
Dennis Doomen
@ Dennis - benar, sudah terlalu lama membuat formulir HTML!
James Anderson
@ James Dan itulah tujuan dari panduan khusus ini. Berusaha membuat Anda memikirkan solusi alternatif yang berpotensi lebih baik.
Dennis Doomen
2

Pertanyaannya adalah menggabungkan "aturan" dengan "pedoman". Aturan dimaksudkan untuk dipatuhi - pedoman adalah saran yang dimaksudkan untuk membuat Anda mempertimbangkan apa yang Anda lakukan dan jika itu benar-benar dapat dilakukan dengan cara yang lebih baik.

Saya akan mengatakan, rata-rata, sebagian besar pemrograman mungkin ditingkatkan dengan mengikuti pedoman, tetapi akan selalu ada kasus-kasus di mana mengikuti pedoman ini secara dogmatis akan menyebabkan lebih banyak masalah daripada yang seharusnya mereka selesaikan. Itu sebabnya mereka tidak disajikan sebagai aturan, tetapi pedoman.

Penjawab sebelumnya telah menunjukkan bahwa para penulis pedoman tidak pernah bermaksud agar mereka diterapkan secara dogmatis dan memasukkan pernyataan tentang dampak itu dalam dokumen mereka.

authentictech
sumber
0

Saya setuju dengan komentar di atas. 7 bagi saya adalah arbiter dan mungkin berguna dalam beberapa bahasa di mana ruby, tetapi untuk bahasa seperti C #, Java, C ++ Saya ragu dengan konvensi "7 baris" ini. Biarkan saya memberi Anda contoh. Aplikasi saya saat ini memiliki 22 bidang teks dan saya melakukan validasi sisi server. Metode ini disebut validateInput () dan preferensi saya memvalidasi semua bidang dalam satu metode itu sendiri kecuali saya telah memvalidasi sesuatu yang kompleks seperti checkEmailFormat (). Jadi pada dasarnya kode metode validateInput saya adalah 108 baris dengan panggilan sesekali ke validasi kompleks.

Sekarang bayangkan jika saya memanggil 25 metode untuk memvalidasi setiap bidang. Jika pengembang baru masuk, ia harus masuk dan keluar dari metode utama untuk melompat melalui 25 metode yang pada gilirannya mungkin memanggil beberapa lainnya. Dia pasti akan tersesat dalam proyek-proyek besar.

Apa yang sebenarnya saya lakukan untuk membuat kode saya jelas adalah memberikan komentar bersih yang pada dasarnya mengatakan apa yang dilakukan 4 baris ini ex -

validateInput (UserObj user) {

// Validasi nama depan ....... ......

// validasi Nama belakang ...... ......

// validasi email ..... // terlalu rumit untuk memeriksa format email expresion regular checkEmailFormat (); .... .....

dan seterusnya.. }

Dinesh Arora
sumber
1
Lihat juga tanggapan saya terhadap pertanyaan James Andersons. Dalam kasus khusus Anda, saya ingin tahu apakah metode validasi itu tidak melanggar beberapa prinsip dan pedoman pada saat yang sama.
Dennis Doomen
0

Aturan yang salah. Dengan kode untuk penanganan pengecualian, pengaturan bidang basis data, validasi, bagaimana sebagian besar metode berada di bawah tujuh pernyataan? Haruskah kita melakukan fungsi lambda sebaris?

Baris kode adalah hitungan kompleksitas yang berubah-ubah. Dengan metode ekstensi saya dapat membuat kode seperti

                Parallel.ForEach(regions, region => {   Console.Write(region.Resorts.Where(x => x.name == "Four Seasons").OrderBy(x => x.RegionId).ThenBy(x => x.ResortId).ThenBy(x => x.name).ToList());   });
Justin
sumber
Sekali lagi contoh yang bagus untuk melakukan terlalu banyak dalam satu metode. Di hampir setiap argumen balasan orang melanggar Prinsip Tanggung Jawab Tunggal (dalam konteks suatu metode).
Dennis Doomen
-1

Semua programmer junior harus dipaksa untuk mematuhi prinsip ini. Itu akan memaksa mereka untuk berpikir tentang struktur dari apa yang sibuk dengan mereka, alih-alih hanya menambahkan lebih banyak kode baris.

Saat ini saya sedang mencari metode 550 baris kode dengan banyak pernyataan if else dan berlanjut dan mengembalikannya. Ini omong kosong. Seandainya programmer hanya dipaksa untuk berpikir tentang apa yang dia lakukan ...

dawidg
sumber