Perl - Standar Pengkodean

Setiap pemrogram, tentu saja, memiliki preferensinya sendiri terkait pemformatan, tetapi ada beberapa pedoman umum yang akan membuat program Anda lebih mudah dibaca, dipahami, dan dipelihara.

Yang paling penting adalah menjalankan program Anda di bawah -w setiap saat. Anda dapat mematikannya secara eksplisit untuk bagian kode tertentu melalui pragma tanpa peringatan atau variabel $ ^ W jika perlu. Anda juga harus selalu menjalankan penggunaan yang ketat atau tahu alasannya mengapa tidak. Penggunaan sigtrap dan bahkan penggunaan pragma diagnostik juga terbukti berguna.

Mengenai estetika tata letak kode, satu-satunya hal yang sangat diperhatikan Larry adalah bahwa tanda kurung kurawal tutup dari BLOK multi-baris harus sejajar dengan kata kunci yang memulai konstruksi. Selain itu, dia memiliki preferensi lain yang tidak terlalu kuat -

  • Indentasi 4 kolom.
  • Membuka keriting pada baris yang sama dengan kata kunci, jika memungkinkan, jika tidak berbaris.
  • Spasi sebelum bukaan keriting dari BLOK multi-garis.
  • BLOK satu baris dapat ditempatkan pada satu baris, termasuk garis keriting.
  • Tidak ada spasi sebelum titik koma.
  • Titik koma dihilangkan dalam BLOK satu baris "pendek".
  • Ruang di sekitar sebagian besar operator.
  • Spasi di sekitar subskrip "kompleks" (di dalam tanda kurung).
  • Garis kosong antara bongkahan yang melakukan hal berbeda.
  • Orang lain yang tidak berpelukan.
  • Tidak ada spasi antara nama fungsi dan kurung buka.
  • Spasi setelah setiap koma.
  • Garis panjang putus setelah operator (kecuali dan dan atau).
  • Spasi setelah tanda kurung terakhir cocok pada baris saat ini.
  • Sejajarkan item yang sesuai secara vertikal.
  • Hilangkan tanda baca yang berlebihan selama kejelasan tidak berpengaruh.

Berikut adalah beberapa masalah gaya yang lebih substantif untuk dipikirkan: Hanya karena Anda DAPAT melakukan sesuatu dengan cara tertentu, tidak berarti Anda HARUS melakukannya dengan cara itu. Perl dirancang untuk memberi Anda beberapa cara untuk melakukan sesuatu, jadi pertimbangkan untuk memilih yang paling mudah dibaca. Misalnya -

open(FOO,$foo) || die "Can't open $foo: $!";

Lebih baik dari -

die "Can't open $foo: $!" unless open(FOO,$foo);

Karena cara kedua menyembunyikan poin utama pernyataan dalam pengubah. Di samping itu,

print "Starting analysis\n" if $verbose;

Lebih baik dari -

$verbose && print "Starting analysis\n";

Karena poin utamanya bukanlah apakah pengguna mengetik -v atau tidak.

Jangan melalui putaran yang konyol untuk keluar dari loop di atas atau bawah, saat Perl menyediakan operator terakhir sehingga Anda dapat keluar di tengah. Cukup "kalahkan" sedikit untuk membuatnya lebih terlihat -

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

Mari kita lihat beberapa poin penting lainnya -

  • Jangan takut untuk menggunakan label loop - mereka ada di sana untuk meningkatkan keterbacaan serta memungkinkan pemutusan loop bertingkat. Lihat contoh sebelumnya.

  • Hindari menggunakan grep () (atau map ()) atau `backticks` dalam konteks kosong, yaitu, saat Anda membuang nilai kembaliannya. Semua fungsi tersebut memiliki nilai kembalian, jadi gunakanlah. Jika tidak, gunakan loop foreach () atau fungsi system () sebagai gantinya.

  • Untuk portabilitas, saat menggunakan fitur yang mungkin tidak diterapkan di setiap mesin, uji konstruksi di eval untuk melihat apakah gagal. Jika Anda tahu versi atau patchlevel apa dari fitur tertentu yang diimplementasikan, Anda dapat menguji $] ($ PERL_VERSION dalam bahasa Inggris) untuk melihat apakah fitur tersebut akan ada di sana. Modul Config juga memungkinkan Anda menginterogasi nilai-nilai yang ditentukan oleh program Configure ketika Perl diinstal.

  • Pilih pengenal mnemonik. Jika Anda tidak dapat mengingat apa artinya mnemonik, Anda mendapat masalah.

  • Meskipun pengenal pendek seperti $ gotit mungkin tidak masalah, gunakan garis bawah untuk memisahkan kata dalam pengenal yang lebih panjang. Biasanya lebih mudah membaca $ var_names_like_this daripada $ VarNamesLikeThis, terutama untuk penutur asli bahasa Inggris. Ini juga merupakan aturan sederhana yang bekerja secara konsisten dengan VAR_NAMES_LIKE_THIS.

  • Nama paket terkadang merupakan pengecualian untuk aturan ini. Perl secara informal mencadangkan nama modul huruf kecil untuk modul "pragma" seperti integer dan strict. Modul lain harus dimulai dengan huruf kapital dan menggunakan huruf besar / kecil, tetapi mungkin tanpa garis bawah karena keterbatasan dalam representasi nama modul sistem file primitif sebagai file yang harus sesuai dengan beberapa byte yang jarang.

  • Jika Anda memiliki ekspresi reguler yang sangat berbulu, gunakan pengubah / x dan letakkan beberapa spasi untuk membuatnya terlihat seperti derau baris. Jangan gunakan garis miring sebagai pembatas jika ekspresi reguler Anda memiliki garis miring atau garis miring terbalik.

  • Selalu periksa kode balik dari panggilan sistem. Pesan kesalahan yang baik harus masuk ke STDERR, termasuk program mana yang menyebabkan masalah, apa panggilan sistem yang gagal dan argumennya, dan (SANGAT PENTING) harus berisi pesan kesalahan sistem standar untuk apa yang salah. Berikut contoh sederhana namun cukup -

opendir(D, $dir) or die "can't opendir $dir: $!";
  • Pikirkan tentang kegunaan kembali. Mengapa menyia-nyiakan kekuatan otak dalam satu kesempatan ketika Anda mungkin ingin melakukan hal seperti itu lagi? Pertimbangkan untuk menggeneralisasi kode Anda. Pertimbangkan untuk menulis modul atau kelas objek. Pertimbangkan untuk membuat kode Anda berjalan dengan bersih menggunakan penggunaan yang ketat dan gunakan peringatan (atau -w) yang berlaku. Pertimbangkan untuk memberikan kode Anda. Pertimbangkan untuk mengubah seluruh pandangan dunia Anda. Pertimbangkan ... oh, sudahlah.

  • Bersikaplah konsisten.

  • Bersikap baik.