Apa yang membuat “gaya yang baik” di Jawa? [Tutup]

9

Saya telah mengajukan pertanyaan ini di Stackoverflow, dan sebelum booed off, saya menerima saran yang membantu dari Péter Török bahwa ini mungkin tempat yang lebih baik untuk mempostingnya.

Saya sudah pemrograman di Jawa selama beberapa tahun. Saya sering mendiskusikan keputusan desain dengan kolega berdasarkan apa yang merupakan 'gaya yang baik'. Memang, ada sejumlah pertanyaan / jawaban StackOverflow yang membahas desain berdasarkan apakah sesuatu itu 'gaya yang baik'.

Tapi apa yang membuat 'gaya yang baik'? Seperti banyak hal, saya tahu ketika saya melihatnya ... tapi saya ingin memiliki ide yang lebih baik daripada hanya hati nurani saya yang mengatakan bahwa desain ini tidak terasa benar.

Apa hal-hal yang Anda pikirkan untuk menghasilkan kode yang baik dan dirancang dengan baik?

(Saya mengakui bahwa ini agak subyektif, karena apa yang 'gaya yang baik' akan tergantung pada tugas yang dihadapi). (Juga, saya harus menambahkan bahwa saya tidak tertarik dengan gaya tim - mis. "Kami menggunakan indentasi 2 spasi daripada 4" ..., dan saya tidak tertarik pada konvensi kode Java.)

Sunting: terima kasih atas semua jawaban / komentar baik sejauh ini. Saya sangat tertarik untuk jawaban yang akan membantu mengkodifikasikan hal-hal yang membuat hati nurani programmer (dan mungkin perut) kunci?

keheranan
sumber
Di antara banyak hal lain yang tercantum di sini, saya pasti akan memastikan untuk menyatakan bahwa komputer dapat mengkompilasi kode dengan cara apa pun yang Anda tulis, tetapi pada akhirnya, kode harus dapat dibaca oleh manusia . Komentar seperti orang gila! Sebuah tes yang baik yang saya suka gunakan: dapatkah seseorang membaca hanya komentar saya untuk mempelajari apa yang dilakukan kode, input dan output apa yang seharusnya, dan algoritma yang digunakan untuk melakukannya?
Brian
1
@ Brian, buat kode Anda jelaskan caranya . Tinggalkan komentar aktual untuk menjelaskan alasannya . Dengan kata lain, jangan berkomentar seperti orang gila (dalam kasus umum)
4
Brian: Teknik itu jelas bukan praktik yang baik. Praktik umum yang baik adalah bertujuan untuk membuat kode Anda mendokumentasikan diri sendiri sebanyak mungkin (dengan nama variabel yang jelas dan kohesi fungsi), dengan komentar untuk menjelaskan "mengapa" dan bukan "bagaimana". Komentar yang menjelaskan setiap detail kecil biasanya dianggap mengganggu dan seringkali berbahaya, karena orang cenderung mempertahankan komentar daripada kode.
Casey Patton
1
@ Brian: Pernyataan terakhir Anda mengatakan itu semua. The kode harus dibaca. Komentar basi. Kode tidak pernah demikian. Jika Anda merasa perlu untuk berkomentar, refactor sampai kode begitu jelas sehingga komentar hanya akan mengulangi apa yang dikatakan kode. Satu-satunya komentar yang baik adalah yang mengatakan mengapa kode bekerja dengan cara tertentu - seperti menghindari bug di perpustakaan pihak ketiga - sehingga seseorang tidak kembali dan mengubahnya menjadi sesuatu yang tidak akan berfungsi karena suatu alasan itu tidak segera terlihat.
Ryan Stewart
2
Saya secara resmi telah direndahkan. Maaf @ maaf. Saya kira perlu meneliti standar pengkodean yang baik ketika datang ke komentar.
Brian

Jawaban:

17

Beberapa poin singkat:

Ryan Stewart
sumber
3
+1. Mungkin yang paling penting: meminimalkan kode duplikat. Jika Anda tergoda untuk memotong dan menempel lebih dari beberapa token, Anda perlu mengekstrak suatu fungsi. Bahkan jika fungsinya adalah satu baris kode.
kevin cline
4
Pada kode duplikat, saya mengambil posisi berikut. Potong dan tempel = oke. Itu hanya memindahkan kode (dengan asumsi Anda menggunakan tempel sekali). Salin dan tempel = mengerikan. Jika Anda hanya menghapus tombol salin dari kosakata Anda, Anda cenderung melakukan hal yang benar.
jsternberg
@ jsternberg: +1 untuk perbedaan cut / copy, tapi saya perhatikan bahwa banyak orang mengatakan "cut / paste" ketika mereka berarti "copy / paste". Saya tidak tahu bagaimana perbedaan itu hilang.
Ryan Stewart
5
Jangan ulangi diri Anda sendiri. Jangan ulangi diri Anda sendiri. Jangan ulangi diri Anda sendiri.
configurator
1
@configurator, Anda berbau agak lucu ...
9

Menambahkan ke daftar Ryan:

  • Ikuti prinsip-prinsip SOLID
  • Pastikan kode Anda tidak memiliki terlalu banyak kerumitan siklus
  • Test Driven Java selalu merupakan hal yang baik
  • Jika Anda memiliki xFactoryFactorykelas, Anda salah melakukannya :-)
  • Mengingat perpustakaan open source di ekosistem Jawa, menciptakan kembali roda adalah gaya yang buruk
  • Gunakan waktu Joda untuk tanggal dan waktu

Saya akan berhenti di situ.

Martijn Verburg
sumber
2
Tapi bagaimana dengan HammerFactoryFactoryFactorykelasnya? ;-)
Wayne Molina
@Wayne, Pabrik adalah indikasi bahwa beberapa keputusan perlu ditunda, dan FactoryFactoryFactories menunjukkan bahwa ada keputusan yang benar-benar perlu dibuat saat runtime tetapi tidak bisa.
Saya tahu, saya menjadi sarkastik dan merujuk pada artikel tentang mengapa J2EE terlalu rumit, dengan HammerFactories dan HammerFactoryFactories dan saya pikir HammerFactoryFactoryFactories. :)
Wayne Molina
@ Martijn - terima kasih atas tautan SOLID; Saya belum pernah menemukan itu sebelumnya. Anda menyarankan menggunakan JodaTime; Apakah ini hanya keengganan (yang pantas) untuk kelas Kalender Java / Tanggal? Bagaimana dengan JSR310 (penerus JodaTime)?
takjub
JSR-310 mudah-mudahan akan berhasil masuk ke Java 8 (ada banyak dari kita bersiap untuk mencoba dan membantu mewujudkannya, hubungi saya jika Anda ingin terlibat). Sementara itu, waktu Joda adalah std de facto untuk berurusan dengan tanggal dan waktu di Jawa. Ada banyak hal yang salah dengan sistem Tanggal dan Kalender Java sehingga saya bahkan tidak tahu harus mulai dari mana ;-). Pembunuhnya adalah Tanggal bisa berubah dan tidak ada konsep instan atau titik atau ... tidak, aku akan berhenti di sana :-).
Martijn Verburg
1

Sementara menghargai jawaban orang lain, saya pikir itu adil untuk berbagi beberapa hal yang saya pikirkan ketika mencoba menulis kode yang baik:

  • apa yang perlu diketahui tentang kelas / metode / variabel ini? yaitu di mana seharusnya pengetahuan ini hidup?

  • bagaimana kode ini memengaruhi memori / kinerja aplikasi saya? (Saya mengakui bahwa 'optimasi prematur adalah akar dari semua kejahatan'; jadi saya tidak menyarankan menghabiskan banyak waktu untuk mengoptimalkan, tetapi lebih pada kesadaran sementara pada awalnya menulis kode saya.)

  • apakah jelas (dari kode, dan struktur kode) apa fungsinya? (Saya mencoba mengikuti pepatah: "Berusaha untuk tidak memungkinkan orang untuk mengerti, berusaha untuk membuat orang tidak mungkin salah paham".)

keheranan
sumber
1

Baca kelas String dan ArrayList untuk contoh-contoh bagus pemrograman Java yang tepat. Tetapi mereka sangat ringkas, hampir gaya C, yang tidak selalu terbaik untuk kode yang dapat dipelihara dengan minimal java docs. Praktik yang umum di toko saya adalah tidak ada komentar, jadi saya mencoba mengomentari dengan kode dengan menggunakan nama verbose camelCase var dan penggunaan baris baru yang berlebihan untuk membatasi satu baris pemikiran dari yang lain. Saya masih berdebat menggunakan tab untuk memisahkan vars dari nilai-nilai mereka. Tab dapat meningkatkan keterbacaan, IMO, tetapi hanya jika dilakukan secara minimal dan sangat subyektif. Saya menemukan ini benar-benar tentang penonton. Tidak ada jawaban terbaik di sini.

carlmart
sumber