Perl - มาตรฐานการเข้ารหัส
แน่นอนว่าโปรแกรมเมอร์แต่ละคนจะมีความชอบของตนเองในเรื่องการจัดรูปแบบ แต่มีหลักเกณฑ์ทั่วไปบางประการที่จะทำให้โปรแกรมของคุณอ่านทำความเข้าใจและดูแลรักษาโปรแกรมได้ง่ายขึ้น
สิ่งที่สำคัญที่สุดคือการรันโปรแกรมของคุณภายใต้แฟล็ก -w ตลอดเวลา คุณสามารถปิดได้อย่างชัดเจนสำหรับบางส่วนของโค้ดผ่านทาง no คำเตือน pragma หรือตัวแปร $ ^ W หากคุณต้องการ นอกจากนี้คุณควรใช้อย่างเข้มงวดหรือรู้เหตุผลว่าทำไมไม่ การใช้ sigtrap และแม้แต่การใช้ pragmas การวินิจฉัยก็อาจพิสูจน์ได้ว่ามีประโยชน์
เกี่ยวกับสุนทรียภาพของการจัดวางโค้ดสิ่งเดียวที่แลร์รี่ให้ความสำคัญอย่างยิ่งคือวงเล็บปีกกาปิดของบล็อกหลายบรรทัดควรสอดคล้องกับคีย์เวิร์ดที่เริ่มการสร้าง นอกเหนือจากนั้นเขายังมีความชอบอื่น ๆ ที่ไม่แรง -
- เยื้อง 4 คอลัมน์
- เปิดหยิกในบรรทัดเดียวกับคีย์เวิร์ดหากเป็นไปได้มิฉะนั้นจะจัดเรียง
- เว้นวรรคก่อนเปิดลอนของบล็อกหลายบรรทัด
- อาจใส่บล็อกบรรทัดเดียวในหนึ่งบรรทัดรวมทั้ง curlies
- ไม่มีช่องว่างก่อนเครื่องหมายอัฒภาค
- เว้นอัฒภาคไว้ใน BLOCK บรรทัดเดียว "สั้น"
- พื้นที่รอบตัวดำเนินการส่วนใหญ่
- เว้นวรรครอบตัวห้อย "ซับซ้อน" (ภายในวงเล็บ)
- เส้นว่างระหว่างชิ้นงานที่ทำสิ่งต่างๆ
- คนอื่น ๆ ที่ไม่ได้กอด
- ไม่มีช่องว่างระหว่างชื่อฟังก์ชันและวงเล็บเปิด
- เว้นวรรคหลังแต่ละลูกน้ำ
- เส้นยาวหักหลังจากตัวดำเนินการ (ยกเว้นและและหรือ)
- เว้นวรรคหลังวงเล็บสุดท้ายที่ตรงกับบรรทัดปัจจุบัน
- จัดเรียงรายการที่เกี่ยวข้องในแนวตั้ง
- ละเว้นเครื่องหมายวรรคตอนที่ซ้ำซ้อนตราบใดที่ความชัดเจนไม่ได้รับผลกระทบ
ต่อไปนี้เป็นประเด็นเกี่ยวกับสไตล์ที่สำคัญกว่าที่ควรพิจารณา: เพียงเพราะคุณสามารถทำบางสิ่งบางอย่างได้โดยเฉพาะไม่ได้หมายความว่าคุณควรทำอย่างนั้น Perl ออกแบบมาเพื่อให้คุณทำสิ่งต่างๆได้หลายวิธีดังนั้นลองเลือกวิธีที่อ่านง่ายที่สุด ตัวอย่างเช่น -
open(FOO,$foo) || die "Can't open $foo: $!";
จะดีกว่า -
die "Can't open $foo: $!" unless open(FOO,$foo);
เนื่องจากวิธีที่สองซ่อนประเด็นหลักของคำสั่งในตัวปรับเปลี่ยน ในทางกลับกัน,
print "Starting analysis\n" if $verbose;
จะดีกว่า -
$verbose && print "Starting analysis\n";
เพราะประเด็นหลักไม่ได้อยู่ที่ว่าผู้ใช้พิมพ์ -v หรือไม่
อย่าเดินผ่านรูปทรงโง่ ๆ เพื่อออกจากลูปที่ด้านบนหรือด้านล่างเมื่อ Perl ให้ตัวดำเนินการสุดท้ายเพื่อให้คุณสามารถออกจากตรงกลางได้ เพียงแค่ "ล้าสมัย" เล็กน้อยเพื่อให้มองเห็นได้ชัดเจนขึ้น -
LINE:
for (;;) {
statements;
last LINE if $foo;
next LINE if /^#/;
statements;
}
มาดูประเด็นสำคัญเพิ่มเติมกัน -
อย่ากลัวที่จะใช้ป้ายกำกับแบบวนซ้ำเพราะมีไว้เพื่อเพิ่มความสามารถในการอ่านและเพื่อให้การแบ่งลูปหลายระดับ ดูตัวอย่างก่อนหน้านี้
หลีกเลี่ยงการใช้ grep () (หรือ map ()) หรือ "backticks" ในบริบทที่เป็นโมฆะนั่นคือเมื่อคุณทิ้งค่าที่ส่งคืนไป ฟังก์ชันเหล่านั้นล้วนมีค่าส่งกลับดังนั้นควรใช้ มิฉะนั้นให้ใช้ foreach () ลูปหรือฟังก์ชัน system () แทน
สำหรับความสะดวกในการพกพาเมื่อใช้คุณสมบัติที่อาจไม่สามารถใช้ได้กับทุกเครื่องให้ทดสอบโครงสร้างใน eval เพื่อดูว่าล้มเหลวหรือไม่ หากคุณทราบว่ามีการใช้งานคุณลักษณะเฉพาะในเวอร์ชันใดหรือระดับแพตช์ใดคุณสามารถทดสอบ $] ($ PERL_VERSION เป็นภาษาอังกฤษ) เพื่อดูว่าคุณลักษณะนั้นจะอยู่ที่นั่นหรือไม่ โมดูล Config ยังช่วยให้คุณสามารถซักถามค่าที่กำหนดโดยโปรแกรม Configure เมื่อติดตั้ง Perl
เลือกตัวระบุช่วยในการจำ หากคุณจำไม่ได้ว่าหมายถึงอะไรแสดงว่าคุณมีปัญหา
แม้ว่าตัวระบุสั้น ๆ เช่น $ gotit อาจใช้ได้ แต่ให้ใช้เครื่องหมายขีดล่างเพื่อแยกคำในตัวระบุที่ยาวขึ้น โดยทั่วไปแล้วการอ่าน $ var_names_like_this จะง่ายกว่า $ VarNamesLikeThis โดยเฉพาะสำหรับผู้ที่ไม่ใช่เจ้าของภาษาอังกฤษ นอกจากนี้ยังเป็นกฎง่ายๆที่ใช้ได้กับ VAR_NAMES_LIKE_THIS อย่างสม่ำเสมอ
บางครั้งชื่อแพ็กเกจอาจเป็นข้อยกเว้นของกฎนี้ Perl ขอสงวนชื่อโมดูลตัวพิมพ์เล็กอย่างไม่เป็นทางการสำหรับโมดูล "pragma" เช่นจำนวนเต็มและเข้มงวด โมดูลอื่น ๆ ควรขึ้นต้นด้วยอักษรตัวใหญ่และใช้ตัวพิมพ์เล็กและใหญ่ผสมกัน แต่อาจไม่มีขีดล่างเนื่องจากข้อ จำกัด ในการแสดงชื่อโมดูลของระบบไฟล์ดั้งเดิมเป็นไฟล์ที่ต้องมีขนาดไม่กี่ไบต์ที่กระจัดกระจาย
หากคุณมีนิพจน์ทั่วไปที่มีขนดกมากให้ใช้ตัวปรับแต่ง / x และใส่ช่องว่างเพื่อให้ดูเหมือนสัญญาณรบกวนของเส้นน้อยลง อย่าใช้เครื่องหมายทับเป็นตัวคั่นเมื่อ regexp ของคุณมีเครื่องหมายทับหรือแบ็กสแลช
ตรวจสอบรหัสส่งคืนของการโทรระบบเสมอ ข้อความแสดงข้อผิดพลาดที่ดีควรไปที่ STDERR รวมถึงโปรแกรมที่ทำให้เกิดปัญหาการเรียกระบบและข้อโต้แย้งที่ล้มเหลวคืออะไรและ (สำคัญมาก) ควรมีข้อความแสดงข้อผิดพลาดมาตรฐานของระบบสำหรับสิ่งที่ผิดพลาด นี่เป็นตัวอย่างง่ายๆ แต่เพียงพอ -
opendir(D, $dir) or die "can't opendir $dir: $!";
คิดเกี่ยวกับการนำกลับมาใช้ใหม่ ทำไมต้องเสียพลังสมองไปกับการยิงครั้งเดียวเมื่อคุณอาจต้องการทำอะไรแบบนี้อีกครั้ง? พิจารณาการวางโค้ดของคุณโดยทั่วไป พิจารณาเขียนโมดูลหรือคลาสอ็อบเจ็กต์ พิจารณาทำให้โค้ดของคุณทำงานได้อย่างหมดจดโดยใช้อย่างเข้มงวดและใช้คำเตือน (หรือ -w) ให้มีผล พิจารณามอบรหัสของคุณ ลองเปลี่ยนมุมมองของคุณทั้งโลก พิจารณา ... โอ้ไม่เป็นไร
คงเส้นคงวา.
เป็นคนดี