ความคิดเห็น“ // …” ที่จุดสิ้นสุดของการบล็อกโค้ดหลังจาก} - ดีหรือไม่ดี? [ปิด]


18

ฉันมักจะเห็นความคิดเห็นดังกล่าวจะใช้:

function foo() {
   ...
} // foo

while (...) {
   ...
} // while

if (...) {
   ...
} // if

และบางครั้งก็ถึงเท่าที่

if (condition) {
   ...
} // if (condition)

ฉันไม่เคยเข้าใจแบบฝึกหัดนี้เลยจึงไม่เคยใช้มันเลย หากรหัสของคุณยาวจนคุณต้องรู้ว่าจุดสิ้นสุดนี้}คืออะไรบางทีคุณควรพิจารณาแยกมันออกเป็นฟังก์ชั่นแยกต่างหาก นอกจากนี้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ส่วนใหญ่สามารถข้ามไปยังวงเล็บเหลี่ยมที่ตรงกันได้ และสุดท้ายสิ่งสุดท้ายคือสำหรับฉันการละเมิดหลักการ DRY อย่างชัดเจน หากคุณเปลี่ยนเงื่อนไขคุณจะต้องจำไว้ว่าให้เปลี่ยนความคิดเห็นเช่นกัน (หรืออื่น ๆ มันอาจทำให้ยุ่งสำหรับผู้ดูแลหรือแม้แต่สำหรับคุณ)

เหตุใดผู้คนจึงใช้สิ่งนี้ เราควรใช้มันหรือเป็นการฝึกฝนที่ไม่ดี?


ใน PHP ฉันใช้ไวยากรณ์ทางเลือกสำหรับโครงสร้างการควบคุมif(condition): ... else: ... endif;
systemovich

@Geoffrey van Wyk - จริงเหรอ? ฉันไม่เคยเห็นใครใช้สิ่งเหล่านี้นอกไฟล์เทมเพลต พวกเขาไม่ได้มาตรฐานมาก แต่สำหรับพวกเขาฉันคิดว่า
Craige

4
@Craige: ภาษาใดก็ได้ที่ PHP สร้างขึ้นเองที่สนับสนุนไม่ใช่ "Extremely Unstandard" - ล่าม PHP กำหนดว่า "มาตรฐาน" คืออะไร
Billy ONeal

Ada if ... then ... end if; while ... loop ... end loop; procedure Foo is ... end Foo;มีเครื่องหมายที่เฉพาะเจาะจงสำหรับการสิ้นสุดของการสร้างมากที่สุด: ฉันพบว่ามันช่วยให้อ่านง่าย (และตรวจสอบโดยคอมไพเลอร์ซึ่งความคิดเห็นไม่ได้)
Keith Thompson

คำตอบ:


32

ฉันจะบอกว่าถ้ารหัสของคุณยาวจนคุณไม่สามารถติดตามวงเล็บปีกกาของคุณได้อย่างง่ายดายรหัสของคุณจำเป็นต้องมีการปรับโครงสร้างใหม่สำหรับภาษาส่วนใหญ่

อย่างไรก็ตามในเทมเพลตภาษา (เช่น PHP) อาจใช้ได้เนื่องจากคุณอาจมีบล็อก HTML ขนาดใหญ่ที่แยกจุดเริ่มต้นและจุดสิ้นสุดของเงื่อนไขหรือโครงสร้างลูป


5
จุดที่ถูกต้องสมบูรณ์สำหรับ PHP ถ้าคุณใช้ PHP ผสมกับ Html 1 คะแนนสำหรับ Gryffindor

3
แม้ว่า PHP จะเป็นภาษาเทมเพลตผสมกับ HTML คุณก็ยังสามารถเยื้องได้ นอกจากนี้คุณไม่ควรใช้วงเล็บปีกกาเมื่อใช้ PHP เป็นภาษาเทมเพลต แต่ควรใช้while(): endwhile;และforeach(): endforeach;สร้างเป็นต้น
Htbaa

9
ฉันไม่เห็นจริง ๆ ว่าทำไมคุณไม่ควรปรับ PHP ให้ใหม่ อาจเป็นภาษาอื่น
Tom Hawtin - tackline

@Htbaa: ฉันไม่อยากจะเชื่อเลยว่าฉันใช้ PHP ตลอดเวลาและไม่รู้เกี่ยวกับสิ่งเหล่านั้น ขอบคุณ! เกี่ยวกับการเยื้องฉันต้องการให้ HTML แบบมีเงื่อนไขเหมือนกับย่อหน้าที่เหลือของหน้าแทนที่จะเป็นไปตาม PHP ที่สร้างขึ้น
Matt Ellen

3
@ ทอม: ฉันหัวเราะ แต่รู้สึกผิด : P

17

มันเป็นรหัสกลิ่นและมักจะเป็นอาการเมาค้างจากรูปแบบรหัสที่ล้าสมัย ก่อนที่จะทำการสร้าง IDE ใหม่ที่เหมาะสมนั้นยากกว่าและไม่เป็นเรื่องปกติเหมือนตอนนี้ดังนั้นวิธีการจึงยาวกว่าและความคิดเห็นเหล่านี้อยู่ที่นั่นเพื่อช่วยนำทางพวกเขาให้ดีขึ้น


15

นี่คือการปฏิบัติที่น่ากลัวทำให้ล้าสมัยจากหลายปัจจัย

  • IDE ที่ทันสมัยที่สุดของไฮไลต์วงเล็บปีกกาที่สอดคล้องกันเมื่อเครื่องหมายรูปหมวกอยู่บนสัญลักษณ์อย่างใดอย่างหนึ่ง
  • หากคุณเข้ารหัสอย่างสะอาดคุณจะไม่ค่อยพบสถานที่ซึ่งวิธีการของคุณมากกว่า 10 บรรทัด

ฉันสังเกตเห็นโปรแกรมเมอร์ Java จำนวนมากที่มีความคิดนี้และทำให้โค้ด Java ดูสกปรกจริงๆและให้ความสำคัญกับโค้ดและความคิดเห็น

สูงแนะนำให้ใช้นี้


4
ฉันมีเพื่อนร่วมงาน (ผู้พัฒนาจาวา) ที่ทำสิ่งนี้ ยกเว้นแทนที่จะเป็น // สำหรับและ // ถ้าเขาใช้ // rof และ // fi มันทำให้ฉันคลั่งและเขาก็ทำทุกที่
Jay

ใช่ฉันมีหนึ่งที่ยืนยันในมัน AAAAAGHHHHH
Rig

2
สิ่งนี้ไม่มีอะไรเกี่ยวข้องกับโปรแกรมเมอร์ Java หรือ Java และไม่ใช่เรื่องปกติหรือเป็นสิ่งที่ต้องทำเมื่อทำการเขียนโปรแกรมใน Java
Jesper

1
+1,000 สำหรับ "เป็นการปฏิบัติที่น่ากลัว"
scunliffe

6

โค้ดอ่านมากกว่า 10 เท่าของที่เขียน

ถ้ามันทำให้ง่ายต่อการอ่านทำ

ฉันขอแนะนำให้ทุกคนที่ทำสิ่งนี้ว่าควรอ่านวิธีอื่น ๆ เพื่อให้อ่านง่ายขึ้น เทคนิคการเปลี่ยนโครงสร้างวงเล็บบนเส้นต่าง ๆ ฯลฯ ที่คนอื่นพูดถึงนั้นเป็นสิ่งที่ดี การแยกสิ่งต่าง ๆ ออกเป็นฟังก์ชั่นวิธีการหรือชั้นเรียนที่แตกต่างกันเพื่อให้รหัสนั้นเป็นการแสดงความคิดเห็นด้วยตนเองก็ดีเช่นกัน นอกจากนี้ยังมีวิธีการกำจัด "ifs" ส่วนใหญ่และวาง "สำหรับ" ลูปเข้าไปในสถานที่ที่ชัดเจนจึงไม่จำเป็นต้องมีสิ่งนี้

แต่บางครั้งผู้คนกำลังเรียนรู้ หากนี่คือสิ่งที่พวกเขากำลังทำอยู่นั่นคือการทำให้โค้ดอ่านง่ายขึ้นให้กำลังใจและสนับสนุนแนวทางปฏิบัติอื่น ๆ ด้วยเช่นกัน ผู้ที่เรียนรู้สมควรได้รับและจะได้รับประโยชน์จากการให้กำลังใจไม่ว่าพวกเขาจะเริ่มอย่างไร การพูดว่า "สิ่งนี้ไม่ดี" ไม่เป็นประโยชน์เหมือนกับการพูดว่า "สิ่งนี้ดีกว่า"


6
นี่มันแย่มาก แม้แต่หนังสือระดับเริ่มต้นก็ไม่ทำสิ่งชั่วร้ายเช่นนี้ "รหัสอ่านมากกว่าที่เขียน 10 เท่า" ... เหตุผลทั้งหมดมากกว่าที่จะไม่ทำให้เสียเวลาของผู้อ่านด้วยรหัส cruft นี้
Thomas Eding

@trinithis จะเกิดอะไรขึ้นถ้าคุณมีคำสั่ง switch 20 ตัว? บางครั้งคุณต้องสนับสนุน 20 ตัวเลือกที่แตกต่างกันและดีกว่าที่จะรวบรวมพวกเขาไว้ในที่เดียวมากกว่า "refactored" ในรูปแบบการตัดสินใจหลายระดับ
quant_dev

ฉันเชื่อว่านี่เป็นแนวทางปฏิบัติของผู้เขียนที่ดูถูกดูแคลน :) ว่าคนอื่นไม่ฉลาดพอที่จะอ่านรหัสยกเว้น โดยทั่วไปแล้วฉันขัดกับการฝึกฝนนี้ แต่ก็โอเคถ้ามีคนทำเพราะมันมีป่าแห่ง} ที่ทำให้อ่านยาก ฉันไม่ทำอย่างนั้นเลย!
WinW

1
@trinithis มันไม่เกี่ยวกับว่ามันไม่ดีหรือไม่มันเป็นวิธีการที่มีประสิทธิภาพในการช่วยให้ผู้คนดีขึ้นเพื่อให้พวกเขาเติบโต การมีประสิทธิภาพ> ความถูกต้อง นอกจากนี้ยังเป็นสิ่งที่เหมาะสมอย่างยิ่งหากคุณกล่าวว่าคุณกำลังสร้างรหัสดั้งเดิมที่ทำให้เกิดความยุ่งเหยิงยิ่งขึ้น บางครั้งสิ่งที่ไม่ดีสามารถทำให้ขั้นตอนระหว่างกาลดีขึ้นและนำไปสู่บางสิ่งที่ดีกว่านั้น
Lunivore

1
@trinithis ขออภัยฉันไม่สามารถอธิบายสิ่งที่คุณหมายถึงเมื่อมันทั้งหมดในหนึ่งบรรทัดเช่นนั้น ฉันคิดว่าฉันพูดถึงว่ายังมีวิธีการอื่นในการสร้างโค้ดที่ devs ทำสิ่งนี้สามารถเรียนรู้ได้
Lunivore

4

ฉันมีฐานรหัสขนาดใหญ่ (C ++) ที่เต็มไปด้วยสิ่งนี้:

int Class::AccessorMethod(void)
{
    return privateValue;
}//end AccessorMethod

สำหรับบางสิ่งเล็ก ๆ นี้ฉันจะบอกว่าสิ่งนี้นอกเหนือไปจาก "กลิ่นรหัส" เป็น "กลิ่นเหม็นรหัส" โดยเฉพาะอย่างยิ่งใน IDE ที่ฉันสามารถจับคู่วงเล็บปีกกาปิดกับการกดแป้นพิมพ์เพื่อค้นหาวงเล็บปีกกาเปิด เมื่อใช้วิธีที่ยาวกว่านี้ฉันจะยังคงใช้การจับคู่รั้งเหนือความคิดเห็นของเทอร์มินัล ความคิดเห็นดังกล่าวทำให้ฉันเสียสมาธิและฉันมักจะคิดว่ามันเป็นเสียงรบกวน


อืมฉันเดาว่าฉันไม่ได้รับการจัดรูปแบบบางอย่างในเว็บไซต์นี้ รั้งแต่ละครั้งควรมีในบรรทัดของตัวเองเช่นเดียวกับร่างกายวิธีการ
PSU

ใน C ++ แม้ว่าฉันมักจะเปิด namespace ที่ไม่ระบุชื่อที่ด้านบนสำหรับสิ่งที่ซ่อนการใช้งาน เมื่อถึงจุดหนึ่งฉันก็ปิดเหล็กค้ำยันนี้และมันมีประโยชน์ที่จะรู้ว่าการปิดฟันหมายความว่าอะไร
CashCow

4

ใน C ++ มีโฮลเดอร์สองอันที่ยังมีประโยชน์และคำแนะนำในการ "แยกรหัสของคุณ" ไม่จำเป็นต้องถือ:

  1. สำหรับเนมสเปซ เนมสเปซสามารถล้อมรอบทั้งไฟล์ได้และในบางครั้งวงเล็บปีกกาอาจทำให้ผู้คนหลุดออกไปดังนั้นการเพิ่มความคิดเห็นเพื่อระบุว่าวงเล็บคือการปิดเนมสเปซนั้นมีประโยชน์ สำหรับรูปแบบการเขียนโค้ดเฉพาะที่ บริษัท ของฉันนี่เป็นสิ่งสำคัญเพราะเราไม่ได้เยื้องกับเนมสเปซตามที่ได้มีการตัดสินใจแล้วว่าการเยื้องนั้นจะเป็นการสิ้นเปลืองพื้นที่ในไฟล์

  2. สำหรับคู่ #ifdef / #endif บางครั้งมีโค้ดจำนวนมากในนั้นสำหรับการรวบรวมตามเงื่อนไขมันอาจทำให้เกิดความไม่พอใจกับการซ้อนและตัวแก้ไขที่เราใช้บ่อย ๆ "ช่วย" เพื่อกำจัดการเยื้องดังนั้นการแสดงความคิดเห็นจึงมีประโยชน์ในระหว่างภาพรวมอย่างรวดเร็ว


+1 สำหรับความคิดเห็นเนมสเปซและเหตุผล นั่นเป็นครั้งเดียวที่ฉันทำสิ่งนี้และด้วยเหตุผลเดียวกัน
JohnB

+ งบสวิตช์ยาว
quant_dev

1

สำหรับฉันรหัสจะต้องมีความสับสนในการเพิ่มความคิดเห็นเช่นเดียวกับที่คุณระบุ

ถ้าเป็นเพียงแค่ว่า // IF Statement ถ้าอย่างนั้นคุณจะสงสัยว่าทำไมมันถึงอยู่ที่นั่นตั้งแต่แรก


ฉันเห็นด้วยดูเหมือนว่าเป็นบรรทัดที่ถูก//endif
คอมเม้นต์

1

อีกทางเลือกหนึ่งในการดูว่าวงเล็บปีกกาของคุณปิดอยู่หรือไม่คือมีที่เปิดอยู่ในคอลัมน์เดียวกับที่ปิด ฉันพบว่ามีความชัดเจนและอ่านได้มากขึ้น

ความคิดเห็นมีประโยชน์เมื่อปกติแล้วจะยากในการติดตามเนื่องจากการเปิดเกิดขึ้นนานแล้ว ปกติแล้วสิ่งนี้จะเกิดขึ้นเฉพาะกับเนมสเปซ (โดยเฉพาะอย่างยิ่งนิรนามใน C ++ ที่ใช้สำหรับรายละเอียดการนำไปใช้ในหน่วยการคอมไพล์) ในกรณีอื่น ๆ ส่วนใหญ่ควรเห็นได้ชัดว่าคุณกำลังปิดอะไร


1

นี่เป็นส่วนที่หลงเหลืออยู่จากวันเก่า ๆ ที่ทำงานในหน้าต่างเทอร์มินัล 80x24 ตัวอักษรโดยเฉพาะอย่างยิ่งถ้าคุณใช้โปรแกรมแก้ไขหน้าต่างเช่น EVE แม้ตอนนี้ฉันทำงานส่วนใหญ่ของฉันในเซสชันเทอร์มินัลโดยใช้กลุ่มและฉันอาจแบ่งเซสชันออกเป็นสามหรือสี่หน้าต่างย่อยดังนั้นฉันสามารถดูได้สองสามบรรทัดในแต่ละครั้ง

ที่กล่าวว่าฉันไม่เคยรู้สึกอบอุ่นกับการประชุมแม้ว่ามันจะช่วยเบคอนของฉันมากกว่าหนึ่งครั้ง ฉันเพิ่งเห็นว่ามันเป็นเสียงรบกวน หากลูปหรือเงื่อนไขของคุณเริ่มมีขนาดใหญ่ใช่คุณอาจต้องการตรวจสอบอีกครั้ง


0

คุณให้เหตุผลที่ถูกต้องทั้งหมดว่าทำไมไม่ใช้สิ่งนี้ โปรแกรมเมอร์ที่ดีทุกคนควรใช้สิ่งเหล่านี้ ดังนั้นทำไมไม่คนใช้มันได้หรือไม่ เพราะพวกเขาทำผิดและไม่รู้ดีกว่า


ก่อนอื่นโปรดอธิบาย downvote ฉันไม่เพียง แต่คิดค้นคำตอบนี้มันเกิดขึ้นจากประสบการณ์ชีวิตจริง: เพื่อนร่วมงานของฉันที่กำลังนั่งอยู่สองสามฟุตถัดจากฉันได้เขียนโปรแกรมมานานกว่า 10 หูแบบนั้นและไม่มีเงื่อนงำว่าทำไมมันถึงผิดจนกระทั่งฉันอธิบายเขา .
stijn

เป็นไปได้ไหมที่มันถูกใช้ในตำราเรียนบางเล่มมีคนจำนวนมากออกมาจากวิทยาลัยที่ใช้มัน? มันอาจมีสถานที่ในข้อความเกริ่นนำ นอกจากนี้ยังมีเหตุผลที่สมเหตุสมผลในตัวประมวลผลล่วงหน้าโดยเฉพาะใน # ifdef / endif รวมถึงการ์ด
Martin Beckett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.