Hai Hari ini saya ingin berbagi tips tentang penulisan kode yang
sempurna dan dapat dimengerti, diambil dari buku Peter Goodlif, "The Craft of a Programmer // Praktek Menulis Kode yang Baik."
Tentu saja, akan menyenangkan untuk membaca buku yang menghibur ini kepada siapa saja yang menulis kode, tetapi bagi mereka yang sangat malas, tetapi yang ingin berhenti menyiksa kurang dan menyesatkan rekan-rekan mereka (
memiliki hati nurani ), saya menyajikan
10 prinsip kode dokumentasi diri di bawah kucing
:1. Tulis kode sederhana dengan format yang baik
Format presentasi memiliki dampak besar pada kemudahan memahami kode. Representasi yang masuk akal menyampaikan struktur kode: fungsi, loop, dan pernyataan bersyarat menjadi lebih jelas.
int fibonacci(int position) { if (position < 2) { return 1; } int previousButOne = 1; int previous = 1; int answer = 2; for (int n = 2; n < position; ++n) { previousButOne = previous; previous = answer; answer = previous + previousButOne; } return answer; }
2. Pilih nama yang bermakna
Nama semua variabel, tipe, file, dan fungsi harus bermakna dan tidak menyesatkan. Nama harus menggambarkan dengan benar apa itu. Jika Anda tidak dapat menemukan nama yang bermakna, maka ada keraguan apakah Anda memahami operasi kode Anda.
Sistem penamaan harus konsisten dan tidak menimbulkan kejutan yang tidak menyenangkan. Pastikan variabel selalu digunakan hanya untuk tujuan yang namanya disarankan.
Pilihan nama yang baik mungkin merupakan cara terbaik untuk menghindari komentar yang tidak perlu. Nama adalah cara terbaik untuk membawa kode lebih dekat ke ekspresi bahasa alami.
3. Pecahkan kode menjadi fungsi independen
Bagaimana Anda memecah kode menjadi fungsi dan nama apa yang Anda berikan dapat membuat kode dimengerti atau benar-benar tidak bisa dipahami.
- Satu fungsi, satu tindakan
Minimalkan efek
samping yang tidak terduga, tidak peduli seberapa berguna efeknya. Mereka akan membutuhkan dokumentasi tambahan.
Tulis fungsi pendek. Mereka lebih mudah dimengerti. Anda dapat menavigasi dalam algoritme yang rumit jika dibagi menjadi beberapa bagian kecil dengan nama yang bermakna, tetapi ini tidak dapat dilakukan dalam kumpulan kode tanpa bentuk.
4. Pilih nama jenis yang bermakna
Sedapat mungkin, jelaskan batasan atau perilaku menggunakan fitur bahasa yang tersedia. Sebagai contoh:
- Saat menentukan nilai yang tidak akan berubah, tetapkan tipe konstan untuk itu (gunakan const di C).
- Jika variabel tidak boleh mengambil nilai negatif, gunakan tipe yang tidak ditandatangani (jika ada dalam bahasa).
- Gunakan enumerasi untuk menggambarkan dataset terkait.
- Pilih jenis variabel dengan benar. Dalam C / C ++, tulis ukuran ke variabel tipe size_t , dan hasil operasi aritmatika dengan pointer ke variabel tipe ptrdiff_t .
5. Gunakan konstanta bernama
Kode seperti
if (counter == 76) membingungkan. Apa arti sihir dari 76? Apa arti dari cek ini? Praktek angka ajaib itu ganas. Mereka mengaburkan makna kode. Jauh lebih baik menulis seperti ini:
const size_t bananas_per_cake = 76; ... if (count == bananas_per_cake) { // }
Jika kode 76 konstan sering ditemukan dalam kode (permisi,
bananas_per_cake ), keuntungan tambahan tercapai: ketika perlu mengubah isi pisang dalam pai, cukup untuk memodifikasi kode di satu tempat, daripada melakukan pencarian global / perubahan nomor 76, yang penuh dengan kesalahan.
Ini tidak hanya berlaku untuk angka, tetapi juga untuk string konstan. Lihatlah
setiap literal dalam kode Anda, terutama jika itu terjadi berulang kali. Bukankah lebih baik menggunakan konstanta bernama bukan?
6. Sorot potongan kode penting
Coba sorot kode penting dengan latar belakang materi biasa. Di tempat yang tepat Anda harus mendapatkan perhatian pembaca. Ada sejumlah trik untuk ini. Sebagai contoh:
- Tempatkan iklan di kelas dengan bijak. Pertama, informasi tentang objek terbuka harus pergi, karena itu adalah pengguna kelas yang membutuhkannya. Detail implementasi yang tertutup harus ditempatkan pada bagian akhir, karena kurang menarik bagi sebagian besar pembaca.
- Jika memungkinkan, sembunyikan semua informasi yang tidak penting. Jangan meninggalkan sampah yang tidak perlu di ruang nama global. C ++ memiliki idiom pimpl, yang memungkinkan Anda untuk menyembunyikan detail implementasi kelas. (Meyers 97).
- Jangan sembunyikan kode penting. Jangan menulis lebih dari satu pernyataan dalam satu baris dan buat pernyataan ini sederhana. Bahasa ini memungkinkan Anda untuk menulis operator for for loop yang sangat inventif, di mana semua logika sesuai dalam satu baris dengan bantuan banyak koma, tetapi operator tersebut sulit dibaca. Hindari mereka.
- Batasi kedalaman bersarang pernyataan bersyarat. Kalau tidak, sulit untuk memperhatikan penanganan kasus yang sangat penting di balik tumpukan ifs dan tanda kurung.
7. Kombinasikan data terkait
Semua informasi terkait harus di satu tempat. Jika tidak, Anda akan membuat pembaca tidak hanya melompati lingkaran, tetapi juga mencari lingkaran ini dengan ESP. API untuk setiap komponen harus diwakili oleh satu file. Jika ada terlalu banyak informasi yang saling berhubungan untuk disajikan di satu tempat, ada baiknya merevisi arsitektur kode.
Jika memungkinkan, gabungkan objek menggunakan konstruksi bahasa. Di C ++ dan C #, Anda bisa menggabungkan elemen dalam
namespace yang sama. Di Jawa, mekanisme bundling adalah mesin paket. Konstanta terkait dapat didefinisikan dalam enumerasi.
8. Memberi label file
Tempatkan blok komentar di awal file dengan deskripsi konten file dan proyek yang berkaitan. Ini tidak membutuhkan banyak pekerjaan, tetapi sangat bermanfaat. Siapa pun yang harus menemani file ini akan mendapatkan ide bagus tentang apa yang dihadapi. Judul ini mungkin memiliki arti khusus: sebagian besar perusahaan perangkat lunak, karena alasan hukum, mengharuskan setiap file sumber memiliki pernyataan hak cipta. Biasanya, header file terlihat seperti ini:
/********************************************************* * File: Foo.java * Purpose: Foo class implementation * Notice: (c) 1066 Foo industries. All rights reserved. ********************************************************/
9. Tangani kesalahan dengan benar
Masukkan penanganan semua kesalahan dalam konteks yang paling cocok. Jika ada masalah membaca / menulis ke disk, itu harus diproses dalam kode yang berkaitan dengan akses ke disk. Untuk menangani kesalahan ini, Anda mungkin perlu membuat kesalahan lain (seperti pengecualian "Saya tidak dapat memuat file"), meneruskannya ke tingkat yang lebih tinggi. Ini berarti bahwa pada setiap level program, kesalahan harus merupakan deskripsi akurat dari masalah dalam
konteksnya . Tidak masuk akal untuk menangani kesalahan yang terkait dengan kegagalan disk dalam kode antarmuka pengguna.
Kode yang didokumentasikan sendiri membantu pembaca memahami di mana kesalahan terjadi, apa artinya dan apa konsekuensinya bagi program saat ini.
10. Tulis komentar yang bermakna
Jadi, kami mencoba menghindari menulis komentar menggunakan metode pendokumentasian tidak langsung lainnya. Tetapi setelah Anda berusaha untuk menulis kode yang dapat dimengerti, segala sesuatu yang lain perlu diberikan komentar. Agar kode mudah dipahami, perlu ditambah dengan jumlah komentar yang
sesuai . Yang mana
Coba trik lain dulu. Misalnya, periksa apakah Anda dapat membuat kode lebih jelas dengan mengubah nama atau dengan membuat fungsi pembantu, dan dengan demikian hindari berkomentar.
Saya yakin bahwa setelah diperkenalkannya beberapa prinsip ini ke dalam kebiasaan, Anda akan membuat satu programmer lebih bahagia. Dan Anda akan menjadi programmer yang bahagia ini. Kapan? Pada saat kembali bekerja pada kode-nya enam bulan lalu.