Apakah ada praktik umum untuk mengomentari ekspresi reguler: komentar inline merujuk bagian berbeda dari RegEx atau komentar umum untuk semua ekspresi?
documentation
coding-style
comments
m0nhawk
sumber
sumber
Jawaban:
Dalam pandangan saya, praktik yang baik adalah dengan singkat menyatakan dalam komentar apa gagasan umum dari ekspresi reguler itu. Ini menyelamatkan pengembang lain (atau terkadang Anda sendiri) kesulitan menyalin-menempelkan regex dalam pengurai seperti RegExr , hanya untuk memahami apa fungsinya.
sumber
Ini agak merupakan jawaban khusus bahasa, tetapi tidak ada bahasa yang disebutkan dalam pertanyaan.
Buku "Dive Into Python" menyarankan penerapan komentar menggunakan Verbose Regular Expressions :
Contoh:
Sumber dan detail lebih lanjut di sini
Metode ini memiliki sedikit kerugian bahwa pemanggil harus tahu bahwa pola ditulis dalam format verbose dan menyebutnya sesuai.
sumber
re.compile
pada titik di mana Anda mendefinisikan pola Anda, dan hanya menyimpan objek yang dihasilkan. Dengan begitu, flag kompilasi pola (termasukre.VERBOSE
) tidak perlu dipisahkan dari pola itu sendiri.#
jika saya menggunakan bendera verbose? Ngomong-ngomong: tautan sumber tampaknya sedang down.#
dapat dicocokkan secara harfiah ketika di dalam kelas karakter:[#]
(sumber: docs.python.org/3/library/re.html#re.X )Biasanya, saya akan menulis sebuah regex dan tidak menjelaskan masing-masing bagian dari regex, tetapi tujuannya. Itulah itu apa dan mengapa. Ini seperti bertanya, "Seperti apa komentar saya?" di mana orang akan berkata " Jangan menulis apa yang dilakukan kode, tulis mengapa kode melakukan apa yang dilakukannya "
Kecuali jika Anda mencoba untuk mengajarkan seseorang tentang regex melalui komentar dalam kode, saya tidak berpikir menjelaskan apa yang akan dilakukan masing-masing individu. Ketika bekerja dengan programmer lain, Anda dapat dengan aman berasumsi bahwa seseorang akan mengetahui sesuatu sebagai ekspresi reguler global.
sumber
Saya kira itu benar-benar tergantung pada bagaimana Anda menyatukan regex. Secara umum saya pikir itu akan menjadi ide yang buruk untuk memasukkan komentar dalam string regex yang sebenarnya itu sendiri (tidak mungkin dalam kebanyakan skenario, sejauh yang saya tahu). Jika Anda benar-benar perlu mengomentari bagian tertentu dari ekspresi reguler (apakah Anda mencoba untuk mengajar seseorang?), Kemudian pisahkan setiap potongan menjadi string terpisah pada baris mereka sendiri, dan komentar setiap baris menggunakan proses komentar normal untuk bahasa pemrograman Anda. Kalau tidak, jawaban pleinolijf cukup bagus.
contoh:
sumber
Saya biasanya mendefinisikan konstanta string yang namanya menggambarkan keseluruhan tujuan dari ekspresi reguler.
Sebagai contoh:
Anda dapat menambahkan komentar di atas konstanta ini untuk memberikan deskripsi, tetapi biasanya nama konstan itu sendiri sudah cukup.
sumber
Dalam beberapa skenario, pengembang mungkin menggunakan ekspresi reguler untuk mencocokkan teks di luar domain tipikal mereka. Pengembang asli mungkin telah melalui banyak iterasi menangkap berbagai kasus tepi yang mungkin hanya ditemukan melalui proses iteratif. Dengan demikian, pengembang selanjutnya mungkin tidak menyadari banyak kasus tepi yang ditangani oleh pengembang asli, bahkan jika mereka mengetahui kasus umum.
Dalam kasus seperti ini, mungkin ada baiknya mendokumentasikan contoh variasi. Lokasi dokumentasi ini dapat bervariasi tergantung pada jumlah (mis., Tidak harus dalam kode).
Salah satu cara untuk mendekatinya adalah dengan mengasumsikan bahwa pengembang masa depan hanya akan memiliki pengetahuan dasar, seperti bagaimana ekspresi reguler bekerja, tetapi tidak ada pengetahuan yang Anda (1) miliki sebelum pengembangan ekspresi reguler yang tidak perlu diketahui oleh para pengembang. pengembang masa depan atau (2) pengetahuan yang Anda peroleh selama pengembangan (misalnya, kasus tepi yang ditemukan).
Misalnya, jika selama pengembangan Anda mengatakan sesuatu seperti "Oh, saya tidak tahu bahwa X dapat mengambil formulir ini," maka ada baiknya mendokumentasikannya (dan mungkin bagian dari regex yang menangani variasi itu).
sumber
Komentar harus menambahkan informasi bermanfaat yang tidak jelas dari kode.
Ada beberapa aplikasi yang membutuhkan setiap siklus terakhir, jika Anda pencocokan pola kumpulan data besar maka mungkin ada cara yang lebih baik, mungkin tidak, tetapi untuk sebagian besar hal waktu eksekusi tambahan bukan masalah besar.
Dan ingat orang berikutnya untuk menemukan kode Anda dan memperbaiki bug mungkin Anda dalam waktu enam bulan dan tidak ada cara Anda akan mengingat apa yang seharusnya dilakukan.
sumber
Ekstrak RegEx menjadi kelas yang terpisah menjadi dengan nama yang bermakna. Lalu saya akan mendokumentasikan kode dengan tes otomatis.
Ini akan memastikan
Secara alami, kelas Anda dapat menampung beberapa regex.
sumber