ส่วนใหญ่เป็นความชอบส่วนตัวอย่างไรก็ตามมีบางสิ่งที่ต้องพิจารณา
ข้อบกพร่องที่เป็นไปได้
ในขณะที่มันสามารถแย้งว่าข้อบกพร่องที่เกิดจากการลืมที่จะเพิ่มวงเล็บปีกกาเป็นของหายากจากสิ่งที่ฉันได้เห็น ว่า พวกเขา จะ เกิดขึ้น เป็นครั้งคราว (เพื่อไม่ลืมIOS ที่มีชื่อเสียงผิดพลาดไปล้มเหลว ) ดังนั้นผมจึงคิดว่าควรจะเป็นปัจจัยในการพิจารณารูปแบบรหัสของคุณ(เครื่องมือบางอย่างเตือนเกี่ยวกับความเข้าใจผิดเยื้องดังนั้นจึงขึ้นอยู่กับโซ่เครื่องมือของคุณมากเกินไป)
รหัสที่ถูกต้อง (ที่อ่านเช่นนี้อาจเป็นข้อบกพร่อง)
แม้ว่าการสมมติว่าโครงการของคุณไม่ได้รับผลกระทบจากข้อบกพร่องเช่นนี้เมื่อคุณอ่านโค้ดคุณอาจเห็นกลุ่มของโค้ดที่ดูเหมือนว่าพวกมันอาจจะเป็นบั๊ก - แต่ไม่ได้ใช้วงจรจิตของคุณ
เราเริ่มต้นด้วย:
if (foo)
bar();
นักพัฒนาเพิ่มความคิดเห็นที่เป็นประโยชน์
if (foo)
// At this point we know foo is valid.
bar();
ต่อมาเมื่อนักพัฒนาขยายตัว
if (foo)
// At this point we know foo is valid.
// This never fails but is too slow even for debug, so keep disabled.
// assert(is_valid(foo));
bar();
หรือเพิ่มบล็อกซ้อนกัน:
if (foo)
while (i--) {
bar(i);
baz(i);
}
หรือใช้มาโคร:
if (foo)
SOME_MACRO();
"... เนื่องจากมาโครอาจกำหนดโค้ดได้หลายบรรทัดมาโครใช้do {...} while (0)
กับหลายบรรทัดหรือไม่มันควรเป็นเพราะมันอยู่ในไกด์นำเที่ยวของเรา แต่ฉันควรตรวจสอบในกรณีที่ดีกว่า!"
ตัวอย่างข้างต้นเป็นรหัสที่ถูกต้องทั้งหมด แต่ยิ่งเนื้อหาในบล็อคโค้ดยิ่งมีจำนวนมากคุณต้องอ่านเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาดใด ๆ
บางทีสไตล์โค้ดของคุณอาจกำหนดว่าบล็อกหลายบรรทัดต้องใช้วงเล็บปีกกา(ไม่ว่าจะเป็นอะไรก็ตามถึงแม้ว่าจะไม่ใช่โค้ดก็ตาม)แต่ฉันเห็นความคิดเห็นประเภทนี้ถูกเพิ่มเข้ามาในรหัสการผลิต เมื่อคุณอ่านมันมีบางข้อสงสัยเล็ก ๆ ว่าใครก็ตามที่แก้ไขล่าสุดเส้นที่ลืมที่จะเพิ่มรั้งบางครั้งผมรู้สึกว่าจำเป็นที่จะต้องตรวจสอบอีกครั้งคือการทำงานตามที่ตั้งใจไว้(โดยเฉพาะเมื่อการตรวจสอบข้อผิดพลาดในพื้นที่ของรหัสนี้)
เสียงรบกวนต่าง
เหตุผลหนึ่งที่ทำให้การปฏิบัติในการใช้เครื่องหมายวงเล็บสำหรับสายเดียวคือการลดเสียงรบกวนต่าง
นั่นคือการเปลี่ยนแปลง:
if (foo)
bar();
ไปที่:
if (foo) {
bar();
baz();
}
... ทำให้บรรทัดที่มีเงื่อนไขปรากฏขึ้นในส่วนต่างเมื่อมีการเปลี่ยนแปลงซึ่งจะเป็นการเพิ่มค่าใช้จ่ายเล็กน้อย แต่ไม่จำเป็น
- บรรทัดแสดงว่ามีการเปลี่ยนแปลงในการตรวจสอบโค้ดหากเครื่องมือการกระจายของคุณเป็นแบบใช้คำคุณสามารถเห็นได้อย่างง่ายดายว่ามีเพียงการเปลี่ยนรั้ง แต่ต้องใช้เวลามากขึ้นในการตรวจสอบว่าบรรทัดไม่เปลี่ยนแปลงเลยหรือไม่
ต้องบอกว่าไม่ใช่เครื่องมือทั้งหมดที่รองรับการกระจายคำโดยใช้ diff (svn, git, hg ... ฯลฯ ) จะแสดงราวกับว่าทั้งบรรทัดเปลี่ยนไปแม้ว่าจะเป็นเครื่องมือแฟนซีบางครั้งคุณอาจต้องมองข้ามเส้นธรรมดาอย่างรวดเร็ว -based diff เพื่อดูว่ามีอะไรเปลี่ยนแปลง
- เครื่องมือการเพิ่มความคิดเห็น (เช่น
git blame
) จะแสดงบรรทัดที่มีการเปลี่ยนแปลงทำให้การติดตามที่มาของขั้นตอนเพิ่มเติมเพื่อค้นหาการเปลี่ยนแปลงที่แท้จริง
สิ่งเหล่านี้มีทั้งขนาดเล็กและขึ้นอยู่กับเวลาที่คุณใช้ในการตรวจสอบโค้ดหรือการติดตามลงซึ่งใช้รหัสบรรทัดที่มีการเปลี่ยนแปลง
ความไม่สะดวกรูปธรรมมากขึ้นของการมีสายการเปลี่ยนแปลงเสริมในต่างที่พวกเขามีแนวโน้มที่สูงขึ้นประทุนที่มีการเปลี่ยนแปลงในรหัสที่จะทำให้เกิดความขัดแย้งซึ่งการควบรวมและจะต้องได้รับการแก้ไขด้วยตนเอง
มีข้อยกเว้นนี้สำหรับรหัสฐานที่มี{
ในบรรทัดของตัวเอง - มันไม่ใช่ปัญหา
diff เสียงโต้แย้งไม่ถือถ้าคุณเขียนในรูปแบบนี้
if (foo)
{
bar();
baz();
}
อย่างไรก็ตามเรื่องนี้ไม่ได้เป็นเช่นการประชุมร่วมกันเพื่อเพิ่มส่วนใหญ่จะตอบสำหรับสมบูรณ์(ไม่แนะนำโครงการควรใช้รูปแบบนี้)