มาตรฐานการเข้ารหัสที่แย่ที่สุดที่คุณเคยทำตาม? [ปิด]


77

คุณเคยทำงานกับมาตรฐานการเข้ารหัสที่:

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

ถ้าเป็นเช่นนั้นกฎข้อใดข้อหนึ่งที่คุณชอบน้อยที่สุดและทำไม?


ตัวอย่างบางส่วนที่นี่


4
ฉันได้ถามคำถามที่คล้ายกัน (แต่ไม่เหมือนกัน) ใน SO ก่อนหน้าโดยวิธี: stackoverflow.com/questions/218123/ …
Brian R. Bondy

@Brian ขอบคุณฉันได้เห็นคำถามของคุณ แต่ลืมเกี่ยวกับมัน
finnw

4
ปัญหาที่แท้จริงของมาตรฐานการเข้ารหัสคือเวลาและความพยายามที่เสียไปเพราะไม่ถูกต้องหรือไม่ ไม่มีอะไรจะดีไปกว่าสงครามการดัดผมแบบหยิกเพื่อสร้างความขัดแย้ง ...
MZB

คำตอบ:


97

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

1) พวกเขาล้าสมัยอยู่เสมอเพราะรหัสเหล่านี้ทำงานเกินกว่าที่จะแจ้งให้ทราบเมื่อคุณกำลังอัพเดทสิ่งต่าง ๆ ความคิดเห็นที่ไม่ดีนั้นเลวร้ายยิ่งกว่าความคิดเห็นใด ๆ

2) พวกเขามักจะทำซ้ำข้อมูลที่มีเครื่องมือควบคุมแหล่งข้อมูลอยู่แล้วซึ่งมีความแม่นยำน้อยกว่า ตัวอย่างเช่น: แก้ไขครั้งสุดท้ายโดยรายการวันที่แก้ไข / เหตุผล


12
ผมพบว่า (อย่างน้อยตอนนี้ก่อนหน้านี้ที่โรงเรียนที่ดูเหมือนแปลก) ที่แสดงความเห็นโดยสิ้นเชิงคือการปฏิบัติที่ไม่ดี
Shady เอ็มนาจิบ

14
ไม่เพียงแค่นั้น แต่ฉันได้พบว่าค่าใช้จ่ายที่เกี่ยวข้องกับการสร้างไฟล์คลาสใหม่เมื่อคุณต้องใส่จำนวนแผ่นไอเท็มที่ด้านบนทำให้ dissades devs จากการสร้างคลาสใหม่และกระตุ้นคลาสที่ไม่ได้ใช้
Gaz

13
ไม่เห็นด้วย! เราจะไม่เพิ่มข้อมูลที่ไร้ประโยชน์ซ้ำซ้อนและข้อมูล แต่เป็นคำอธิบายที่แท้จริงเกี่ยวกับสิ่งที่ฟังก์ชั่นทำ (ในไฟล์. h) และมันมีประโยชน์มาก! แน่นอนเรามุ่งมั่นที่จะรักษาไว้ในซิงค์กับรหัส
ตัวช่วยสร้าง

5
@Shady M Najib ไม่ดีเสมอหรือไม่ดีเมื่อได้รับอนุญาตให้ควบคุมแบบไม่มีการควบคุม / ไม่ได้ทำอะไร โดยทั่วไปแล้วรหัสที่ดีจะทำให้วัตถุประสงค์ชัดเจนเพียงพอที่จะหลีกเลี่ยงความคิดเห็น - แต่นั่นไม่ใช่กรณีเสมอไปและฉันรู้สึกว่าในการแสดงความคิดเห็นในสถานการณ์เหล่านี้มีความสำคัญ ฉันไม่สามารถคิดเหตุผลที่ไม่ดีได้เหตุผลหนึ่งที่จะรวมความคิดเห็นของ XMLDoc
Nathan Taylor

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

130

มีอาจารย์หนึ่งครั้งที่เรียกร้องเรามีความคิดเห็นอย่างน้อยหนึ่งข้อสำหรับแต่ละบรรทัดของรหัส

//Set x to 3
var x = 3;

//if x is greater than 2
if(x>2){

    //Print x
    Print(x);
}

มันไร้สาระทีเดียว


10
นี่ไม่ใช่แค่เพื่อให้อาจารย์รู้ว่าคุณรู้แน่ชัดว่าเกิดอะไรขึ้น?
John MacIntyre

80
ฉันคิดว่ามันชัดเจนว่าเกิดอะไรขึ้นและมันไม่ใช่การศึกษา
Dan Ray

18
ตัวอย่างที่คุณมีด้านบนมีความชัดเจน แต่ถ้านักเรียนคัดลอกการเรียกฟังก์ชั่นบางอย่างจากแอพอื่นหรือหนังสือหรืออะไรที่เคยทำและไม่เข้าใจจริงๆ ศาสตราจารย์จะรู้ได้อย่างไร กฎโง่นี้ไม่อนุญาตให้มีพื้นที่สีเทา (ซึ่งในการป้องกันของเขาอาจถูกทารุณกรรมมาก่อน) นั่นคือวิธีที่ฉันตีความสิ่งนี้ ... คิดคุณถ้าฉันเห็นสิ่งนี้ในสภาพแวดล้อมที่ไม่ใช่วิชาการมันอาจทำให้ฉันตกใจเล็กน้อย ;-)
John MacIntyre

4
ใช่ยกเว้นคุณสามารถเขียนความคิดเห็นที่เพิ่งทำซ้ำรหัสและไม่แสดงความเข้าใจใด ๆ เขาทำให้คุณถูกต้อง "// Ending Brace" หรือไม่
ทางเลือก

6
จะเกิดอะไรขึ้นถ้าคุณได้รับความคิดเห็นที่มีประโยชน์ในรหัสของคุณโดยไม่ตั้งใจ คุณต้องใส่// commentสายก่อนหน้านั้นหรือไม่?
กำหนดค่า

103

มาตรฐานการเข้ารหัส บริษัท ของเรา (C #) เรียกว่าการใช้งานอย่างครอบคลุมของ #REGIONs (สำหรับผู้ที่ไม่ทราบว่าจะทำเครื่องหมายบล็อกของซอร์สโค้ดที่จะยุบตัวเป็นบรรทัดเดียวใน Visual Studio) ด้วยเหตุนี้คุณจึงเปิดสิ่งที่ดูเหมือนว่าจะเป็นคลาสที่มีโครงสร้างอย่างดีเสมอเพื่อค้นหากองและกองขยะกวาดใต้พรมที่ซ้อนกันอย่างลึกล้ำของ #REGION constructs คุณอาจมีพื้นที่รอบ ๆ บรรทัดเดียวเช่นต้องย่อส่วนของ LOG เพื่อย่อเพื่อค้นหาการประกาศเพียงครั้งเดียวของ Logger แน่นอนว่ามีวิธีการมากมายที่เพิ่มเข้ามาหลังจากที่บางพื้นที่ถูกวางไว้ในขอบเขตของ "ผิด" เช่นกัน สยองขวัญ. สยองขวัญ.

ภูมิภาคเป็นหนึ่งในคุณสมบัติที่แย่ที่สุดที่เคยเพิ่มเข้าไปใน Visual Studio มันสนับสนุนโครงสร้างพื้นผิวมากกว่าโครงสร้าง OO จริง

ทุกวันนี้ฉันฆ่า #REGIONs ตามที่เห็น


11
ผมพยายามที่จะขึ้นลงคะแนนนี้โหลครั้ง ...
TGnat

22
หากคุณคิดว่าคุณต้องการ #REGION ฉันคิดว่าคุณต้องปรับโครงสร้าง
Jay Bazuzi

23
ฉันมักจะจัดระเบียบรหัสตามภูมิภาคให้เป็นตัวสร้างคุณสมบัติเหตุการณ์วิธีการและสมาชิก มันทำให้การจัดการและการนำทางแหล่งที่มาแน่นอน (โดยเฉพาะอย่างยิ่งในคลาสยูทิลิตี้คงที่บางที่สามารถเติบโตขนาดใหญ่สวย) ฉันจะไม่ใช้มันมากกว่านั้น
Evan Plaice

26
เรามีมาตรฐานการเข้ารหัสที่เรียบง่าย: ไม่ต้องซ้อนกันตามภูมิภาค เพียงแค่ใช้ไปยังกลุ่มที่เกี่ยวข้องกับวิธีการ (initialisation อนุกรมคุณสมบัติ ฯลฯ )
เจสันวิลเลียมส์

6
เพียงวัตถุประสงค์ที่ดีของ #regions คือการซ่อนรหัสที่ไม่จำเป็นต้องได้รับการแก้ไข นั่นอาจเป็นรหัสที่สร้างขึ้นหรือรหัสที่มีอัลกอริธึมที่ยากต่อการถูกต้องที่คุณไม่ต้องการให้ผู้อื่นแตะต้องหรืออาจบล็อกบล็อคการแก้ไขข้อบกพร่องที่น่าเกลียด แต่ไม่ใช่รหัสที่ผู้คนจะทำงาน สำหรับผู้ที่ติดอยู่ในร้าน #region ฉันมีมาโครที่ย่อมาจากคำจำกัดความ แต่ขยายขอบเขต ดูที่นี่: stackoverflow.com/questions/523220/awesome-visual-studio-macros/ …
Kyralessa

80

ในงานเดียวเราถูกบังคับให้ใช้สัญกรณ์ฮังการีบางรูปแบบในฐานข้อมูล

ฉันจำรายละเอียดไม่ได้ แต่จากหน่วยความจำชื่อแต่ละฟิลด์ต้องมี:

  • ไม่มีสระ
  • ตัวอักษรตัวพิมพ์ใหญ่ทั้งหมด
  • การอ้างอิงถึงตาราง
  • ตัวบ่งชี้ชนิดข้อมูล
  • ความยาวข้อมูล
  • ตัวบ่งชี้ nullable

ตัวอย่างเช่นคอลัมน์ที่มีชื่อแรกของบุคคลนั้นอาจถูกเรียกว่า: PRSNFRSTNMVC30X(ตารางบุคคล, คอลัมน์ชื่อ, Varchar 30 ตัวอักษร, ไม่เป็นโมฆะ)


14
ขออภัย แต่จะเกิดอะไรขึ้นเมื่อคุณปรับฐานข้อมูลอีกครั้งหรือเมื่อคุณตัดสินใจว่าความยาวของ VARCHAR จะต้องแตกต่างกัน ทันใดนั้นคุณต้องผ่านรหัสทั้งหมดของคุณและเปลี่ยน ... โอ้พระเจ้า นั่นดูน่ากลัว
Tom Morris

71
ไม่มีสระ ??! คุณพูดเล่นใช่มั้ย
Daniel Cassidy

39
คนที่บังคับใช้มาตรฐานนี้มีสันบนหน้าผากของพวกเขาและมักจะหารือเกี่ยวกับเกียรติและการต่อสู้?
Ryan Roberts

10
ฮ่าฮ่าพวกเขาเป็น DBA ดังนั้น ... ;)
Damovisa

14
คุณควรส่งชื่อคอลัมน์ของคุณผ่านตัวย่อ URL PersonFirstNameVarchar30NotNull = bit.ly/cULlQc
Billy Coover

48

ยืนยันว่าการจัดฟันทั้งหมดตามด้วยความคิดเห็นสำหรับสิ่งที่วงเล็บปีกกาสิ้นสุดลง:

เช่น:

for (int i = 0; i < 10; i++)
{
    if (foo > bar)
    {
        printf("Foo greater than bar");
    } // End If (foo > bar)

    while (baz)
    {
       farb();
    } // End while (baz)
} // End For

21
ถ้าคุณต้องการคอมเม้นต์เพื่อพูดว่าจุดเริ่มต้นของบล็อกคืออะไรบล็อกนั้นยาวเกินไปหรือเนื้อหานั้นซับซ้อนเกินไป => refactor
ริชาร์ด

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

7
นั่นเป็นความคิดที่ดีสำหรับโลกที่ไม่มี IDE ที่ทรงพลัง
IAdapter

9
@Jay ใน IDE ที่ดีคุณสามารถเน้นวงเล็บปีกกาหนึ่งอันและจะเน้นวงเล็บปีกกาอื่นที่เกี่ยวข้อง ฉันเกลียดเมื่อมีคนทำเช่นนี้
Evan Plaice

3
ในขณะที่ตัวอย่างของคุณเป็นบิตในด้านบ้า (เนื่องจากพวกเขาไม่นานพอที่มันจะมีความสำคัญและจะทำให้คุณช้าลงเมื่อเปลี่ยนตรรกะ) นี่ไม่ใช่สิ่งที่เลวร้ายเสมอไป ความคิดเห็นเช่นนี้มีประโยชน์มากสำหรับการปิดการประกาศเนมสเปซ / endif ที่ครอบคลุมไฟล์ทั้งหมด
jsternberg

38
#define AND  &&
#define OR   ||
#define EQ   ==

'Nuff กล่าวว่า.


9
#include <iso646.h> จะไม่เป็นตัวเลือกที่ดีกว่านี้อีกหรือ
AndrejaKo

3
@AndrejaKo: นี่คือ <iso646.h> predated นี่เป็นความพยายามที่จะทำให้ C ดูเหมือน FORTRAN
Niall C.

2
นี่เป็นมาตรฐานการเข้ารหัสจริงหรือ นั่นคือมีนโยบายของ บริษัท ต่อการเขียนผู้ประกอบการโดยตรงหรือไม่
finnw

21
มันยังมี#define BEGIN {และ#DEFINE END }?
JBRWilkinson

3
นั่นทำให้ฉันนึกถึงบทความ WTF รายวันที่ฉันเห็นว่ามีโปรแกรมเมอร์ C ++ บางคนมีคำจำกัดความจำนวนหนึ่งเพื่อให้ดูเหมือน Visual Basic (หรืออาจเป็นแค่ภาษา Basic บางภาษา) #define void Sub, #define} สิ้นสุดสิ่งเช่นนั้น
Wayne Molina

37
  • ชื่อตัวแปรท้องถิ่นเป็นตัวพิมพ์เล็กทั้งหมดโดยไม่มีขีดล่าง

ตัวอย่างจริง: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts,potentialmsceventref

New York Times มีน้ำหนัก :

“ ไม่ควรใช้ช่องว่างของ Word เพื่อรับสิทธิ์ กรีกโบราณตัวอักษรตัวแรกของสระสามารถถอดรหัสได้โดยไม่ต้องเว้นวรรคหากคุณออกเสียงออกมาและไม่ได้ใช้ […] ละตินก็หยุดแยกคำในศตวรรษที่สอง การสูญเสียนั้นทำให้งงเพราะตาต้องทำงานหนักกว่ามากในการอ่านข้อความที่ไม่คั่น แต่ดังที่พอลซาเคอนักอธิบายเรื่องโลกยุคโบราณไม่ต้องการ 'ทำให้การอ่านง่ายขึ้นและเร็วขึ้น'”

3
+1 ความรำคาญเล็กน้อยเพิ่มขึ้น อีกทั้งพวกเขาก็ยังเถียงกันได้ยากเพราะตัวแก้ไขมาตรฐานการเข้ารหัสหรือ PM สามารถพูดว่า "มันไม่มีภาระที่ดีดังนั้นจึงไม่คุ้มที่จะเปลี่ยน"
finnw

1
เผง (ถึงแม้ว่าในกรณีนี้การอ่านตัวแปรที่หลากหลายเช่นนี้เพิ่มขึ้นอย่างมากโดยทั่วไป)
John Siracusa

57
เป็นที่ชอบใจของคุณด้วยการประดิษฐ์ชื่อมากกว่าที่จะถูกแยกวิเคราะห์สองวิธี pageshits, องคชาติ, และอื่น ๆ
Jay Bazuzi

4
@Jay * sexchange
กำหนดค่า

2
@configurator: เมื่อทีมดีบักเกอร์ Visual Studio กำลังทำงานเกี่ยวกับคุณสมบัติเพื่อให้คุณเห็นข้อยกเว้นในการบินขณะนี้ในหน้าต่างดูพวกเขากำลังจะเพิ่มตัวแปรหลอกที่เรียกว่า "$ ex" เราไม่ได้สังเกตมานาน จากนั้นเราเปลี่ยนชื่อเป็น "$ exception" แต่ฉันยังคงอ่านว่ามี 's' อยู่
Jay Bazuzi

36

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

เราถูกห้ามไม่ให้ใช้งานซอฟต์แวร์ผสาน แต่ละไฟล์สามารถแก้ไขได้โดยโปรแกรมเมอร์หนึ่งคนต่อครั้ง แน่นอนว่าซอฟต์แวร์ควบคุมการแก้ไขเป็นนิยายวิทยาศาสตร์

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


เขาอาจไม่เคยได้ยินคำว่า 'refactoring'
nanda

3
เขาไม่เคยได้ยินคำอื่นอีกมากมายเลย ...
Wizard79

คุณไม่จำเป็นต้องทำการทดสอบอย่างเป็นทางการเพราะคุณไม่เคยเปลี่ยนวิธี ...
กำหนดค่า

36

ปฏิสัมพันธ์กับฐานข้อมูลทั้งหมดจะต้องมีการดำเนินการผ่านวิธีการจัดเก็บ มันอาจสมเหตุสมผลถ้าเราอยู่ในปี 1997 ไม่ใช่ปี 2010

ฉันเพิ่งรู้ว่าสิ่งนี้ครอบคลุมถึงเกณฑ์ทั้งหมดของคำถามเดิม:

  • ลดประสิทธิภาพการทำงานลงอย่างมากใช่ไหม ตรวจสอบ โปรด - เพียงแค่ใช้ออม
  • ตอนแรกมีการรวมไว้ด้วยเหตุผลที่ดี แต่ถูกเก็บรักษาไว้นานหลังจากความกังวลดั้งเดิมกลายเป็นสิ่งที่ไม่เกี่ยวข้องหรือไม่? ตรวจสอบ ผู้จัดการเป็นผู้พัฒนาเซิร์ฟเวอร์ฐานข้อมูลเมื่อ 1,000 ปีที่แล้วและวางมาตรฐานการเข้ารหัสนี้
  • อยู่ในรายการนานมากจนเป็นไปไม่ได้ที่จะจดจำพวกเขาทั้งหมดหรือไม่? ตรวจสอบ ซึ่งรวมถึง 'ลอจิกมากควรเก็บไว้ในฐานข้อมูลที่เป็นไปได้'
  • ทำให้คุณคิดว่าผู้แต่งพยายามที่จะทิ้งเครื่องหมายไว้แทนที่จะให้กำลังใจการเขียนโปรแกรมที่ดี? ตรวจสอบ ทำให้กลับมาที่ผู้จัดการเป็นผู้พัฒนาเซิร์ฟเวอร์ฐานข้อมูล
  • คุณไม่รู้ว่าทำไมรวมอยู่ด้วย? ตรวจสอบ

2
เรามีบางคนในค่ายนี้ในที่ทำงานของฉัน มันตลกเมื่อพวกเขาพยายามที่จะเล่นการ์ดประสิทธิภาพการทำงานและแสดงให้เห็นเพียงวิธีการออกจากวันที่ความรู้ของพวกเขาคือ
คืนสิทธิ์ Monica

3
เดี๋ยวก่อน .. ในทุกเรื่องฉันคิดว่า SP นั้นดีกว่าทำงานได้ดีกว่าสาย SQL ตรงจากพูด C #?
Sk93

3
ฟังดูเหมือนคุณรู้ว่าทำไมพวกเขาถึงรวมอยู่ด้วย : P
Mason Wheeler

4
ในที่สุดเมื่อฉันโตขึ้นฉันก็เข้าใจว่าทำไมทุกอย่างควรผ่าน DB :) ในความจริงจังทั้งหมดนี่ทำให้หลายสิ่งง่ายขึ้นอย่าพยายามคิดค้นล้อใหม่อีกครั้ง
Jé Queue

3
ฉันได้ยินเหตุผลที่น่ารัก "เราไม่สามารถใช้ OR / M ได้เพราะการโต้ตอบทั้งหมดต้องใช้ SPs" ช่างเป็นการสิ้นเปลืองกำลังคน
กำหนดค่า

33

ไม่ได้รับอนุญาตให้ใช้ STL หรือไลบรารี C ++ มาตรฐานอื่น ๆ เนื่องจาก CTO เชื่อว่า 'เรา' สามารถทำได้ดีขึ้นและเร็วขึ้น แม้แต่โครงสร้างพื้นฐานเช่นรายการและคลาสสตริง


5
ครั้งเดียวที่ฉันเคยได้ยินคนที่ไม่ได้ใช้ STL เพราะมันไม่เร็วพอและถูกต้องสำหรับเกม EA ทำการปรับใช้ STL สำหรับเกมของตนเอง ฉันสงสัยอย่างมากว่ามันมีความสำคัญอีกต่อไป (เกมที่ทันสมัยมี GPU จำกัด ) และฉันสงสัยว่าพวกเขาใช้มัน แต่ถึงกระนั้นมันเป็นการใช้งาน STL ไม่ใช่ห้องสมุดใหม่ทั้งหมด คุณยังคงใช้ STL เมื่อใช้ EASTL
Matt Olenik

1
@Matt: หากต้องการเพิ่มสิ่งนี้การร้องเรียนของ EA นั้นมีศูนย์กลางที่การใช้หน่วยความจำและการกำหนดค่าเริ่มต้น การใช้งานของตัวเองใช้หน่วยความจำน้อยกว่าปล่อยเร็วและหลีกเลี่ยงการเริ่มต้นวัตถุที่จะเริ่มต้นในภายหลัง
Matthieu M.

ฉันจะบอกให้เขาเขียนมันเอง
rightfold

31

สัญกรณ์ฮังการี

ตัวอย่างที่แยกออกมาจาก " Charles Simonyi การอธิบายของแบบแผนการระบุชื่อตัวบ่งชี้ฮังการี " บน MSDN

1 # รวม“ sy.h”
2 int ภายนอก * rgwDic;
3 ภายนอก bsyMac;
4 struct SY * PsySz (char sz [])
6 {
7 ถ่าน * pch;
8 int cch;
9 struct SY * psy, * PsyCreate ();
10 int * pbsy;
11 int cwSz;
12 wHash ที่ไม่ได้ลงชื่อ = 0;
13 pch = sz;
14 ในขณะที่ (* pch! = 0
15 wHash = (wHash11 + * pch ++;
16 cch = pch-sz;
17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash];
18 สำหรับ (; * pbsy! = 0; pbsy = & psy-> bsyNext)
19 {
20 ถ่าน * szSy;
21 szSy = (psy = (struct SY *) & rgwDic [* pbsy]) -> sz;
22 pch = sz;
23 ในขณะที่ (* pch == * szSy ++)
24 {
25 ถ้า (* pch ++ == 0)
26 return (psy);
27}
28}
29 cwSz = 0;
30 ถ้า (cch> = 2)
31 cwSz = (cch-2 / sizeof (int) +1;
32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) - rgwDic;
33 ศูนย์ ((int *) psy, cwSY);
34 bltbyte (sz, psy-> sz, cch + 1);
35 return (psy);
36}

5
โอ้วววววววววว!
Reinstate Monica

22
ปัญหาที่ใหญ่ที่สุดของตัวอย่างนี้คือชื่อตัวแปรที่ไม่มีความหมาย ถอดคำนำหน้าฮังการีออกไปบางส่วนมีความยาว 1 หรือ 0 ตัวอักษร
finnw

8
นี่คือภาษาฮังการีของระบบซึ่งมีประโยชน์ในภาษาที่พิมพ์น้อย (เนื่องจากเข้ารหัสข้อมูลประเภทที่สำคัญสำหรับการทำงานในภาษาเหล่านี้ในชื่อ) - มันไร้ประโยชน์ในภาษาที่พิมพ์อย่างมาก ทางเลือกที่ดีกว่าสำหรับภาษาที่มีการพิมพ์ที่รุนแรงคือ Apps Hungarian ซึ่งเข้ารหัสข้อมูลสำคัญเกี่ยวกับการใช้ตัวแปร (สมาชิกตัวชี้ความแปรปรวนตัวทำดัชนี) ซึ่งเป็นภาษาที่ตัวเองไม่สนับสนุน
Jason Williams

5
โอ้ได้โปรด. ฉันไม่เคยสับสนกับสมาชิกในท้องถิ่นและฉันไม่ได้ใช้ภาษาฮังการีที่โง่ ๆ สำหรับสมาชิก / คนท้องถิ่น / สาขา / อะไรก็ตาม ฉันคิดว่าพวกเขาอาจจะมีประโยชน์สำหรับการแยกความแตกต่างระหว่างสายอักขระที่แตกต่างกันเช่น 'ปลอดภัย' และ 'ไม่ปลอดภัย' เช่นตัวอย่างของโจเอลในการทำผิดรหัสดูผิด
กำหนดค่า

3
@configurator: ตัวอย่างของ Joel น่ากลัวเขาควรที่จะมีประเภทต่าง ๆ ดีกว่าจากนั้นคอมไพเลอร์จะบังคับใช้
Matthieu M.

28

ฉันเคยทำงานในโครงการที่นำโครงการบังคับให้ทุกตัวแปร - ตัวแปรทุกตัว - จะขึ้นต้นด้วย "v" ดังนั้น vCount, vFirstName, vIsWarranty ฯลฯ

ทำไม? “ เพราะเรากำลังทำงานใน VBScript และทุกอย่างก็แปรปรวนอยู่แล้ว”

WTF


93
ฉันเคยทำงานในภาษาที่ต้องการตัวแปรทุกตัว - ตัวแปรทุกตัว - จะขึ้นต้นด้วย "$"
nohat

6
@nohat: และคุณรู้ว่ามันน่าอัศจรรย์ใช่มั้ย
Josh K

ฉันเคยทำงานในภาษาที่ตัวแปรทั้งหมดของฉันเริ่มต้นด้วยเครื่องหมายวรรคตอนเช่น '$' หรือ '%' หรือ '@' ฉันยังคงทำแล้วตอนนี้
David Thornley

3
นี้เท่านั้นจริงๆกลายเป็นปัญหาเมื่อจำเป็นต้องใช้ของคุณจะนำต์ก่อนหน้าที่แล้วรหัสของคุณเป็นจริงf fUcked (vUp)
Joe D

1
ฟังดูเหมือน Perl รุ่นต่างๆ ...

26

เกือบลืมสิ่งนี้:

อ้างจากผู้จัดการ:

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

สิ่งนี้ไม่ได้มีไว้สำหรับซอฟต์แวร์ผู้บริโภค แต่กำหนดเองสำหรับองค์กรขนาดใหญ่เดียว ลูกค้าไม่ต้องจ่ายเงินเป็นเวลาหลายปีหลังจากนั้น อาจดูเล็กน้อย แต่การพยายามละเว้นข้อบกพร่องนั้นยากกว่าการค้นหาพวกมัน


2
นี่เป็นนโยบายที่น่ากลัว ฉันหวังว่าผู้จัดการคนนี้จะบรรจุกระป๋อง
เบอร์นาร์ด

@ Bernard-In องค์กรส่วนใหญ่ที่สร้างกระแสรายได้ระยะยาวนั้นเป็นสิ่งสำคัญสำหรับการส่งเสริมการขายที่รวดเร็ว หวังว่าจะมีคนอื่นเห็นความวิกลจริตในเรื่องนี้และบังเอิญขับเขา / เธอไปที่ลานจอดรถ
Jim Rush

24

ความคิดเห็น XML ที่มีการบังคับใช้เกี่ยวกับวิธีการที่ไม่ใช่ส่วนตัวค่าคงที่ enums และคุณสมบัติทั้งหมด

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

/// <summary>
/// Validations the handler.
/// </summary>
/// <param name="propertyName">The property name.</param>
public void ValidationHandler(string propertyName) 
{
   // whatever
}

[แก้ไข] เหตุผลที่ฉันพูดถึงสิ่งนี้ว่าเป็นมาตรฐานที่ไร้สาระไม่ใช่เพราะฉันคิดว่าความคิดเห็นของวิธีการนั้นโง่ แต่เพราะคุณภาพของความคิดเห็นเหล่านี้ไม่ได้ถูกบังคับใช้ในทางใดทางหนึ่งและทำให้เกิดความยุ่งเหยิงมากมายในไฟล์รหัส . มีวิธีที่ดีกว่าในการสร้างเอกสารรหัสที่มีความหมายมากกว่า blind "ต้องมีความคิดเห็น" ข้อกำหนดของการสร้าง


13
' Validations the handler' - uh-oh
เอริค

8
+1 ฮึฉันเกลียดสิ่งนี้ ฉันคิดว่าถ้าคุณใช้ซอฟต์แวร์เพื่อสร้างความคิดเห็นคุณก็ไม่ต้องการมัน
bleevo

9
ฉันไม่คิดว่านี่เป็นกฎที่ไม่ดี เมื่ออ่านวิธีที่ฉันต้องบำรุงรักษาเป็นครั้งแรกมันช่วยได้มากหากฉันมีข้อกำหนดสำหรับข้อโต้แย้งทั้งหมด มี subtleties ปกติ (เช่นเกิดอะไรขึ้นถ้าอาร์กิวเมนต์เป็นโมฆะถ้าเป็นคอลเลกชันที่ว่างเปล่าชื่อของไฟล์ที่ไม่มีอยู่ ฯลฯ ) กฎที่ดี (IMHO) อีกข้อคือชื่อวิธีที่ควรเป็นคำกริยา แต่ในตัวอย่างของคุณมันเป็นคำนาม
finnw

3
@finnw ฉันคิดว่ามันเป็นแนวปฏิบัติที่ดี แต่เป็นมาตรฐานที่ไม่ดี หากนักพัฒนาอยู่บนบอร์ดและเขียนความคิดเห็นวิธีการที่มีความหมายเมื่อพวกเขาได้รับการรับประกัน ถ้าไม่คุณจะจบลงด้วยความยุ่งเหยิงใหญ่ และในกรณีก่อนหน้านี้คุณไม่จำเป็นต้องมีการบังคับใช้ระดับการคอมไพล์เลย
อดัมเลียร์

7
กรณีคลาสสิกของเอกสาร ความคิดเห็นที่ไม่ได้บอกอะไรนอกเหนือไปจากสิ่งที่เห็นได้ชัดควรจะถูกฆ่าในสายตา
Cumbayah

23

ไม่ใช่มาตรฐานการเข้ารหัส แต่เรามีไฟล์ในตัวควบคุมแหล่งข้อมูลที่เรียกว่า 'changelog.txt'

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

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


6
และไม่มีใครรู้svn logหรือไม่?
Htbaa

1
คนที่เริ่มนโยบายก็หายไปนาน ฉันเริ่มภายในสัปดาห์เดียวกับ CTO ใหม่ (เพื่อนของฉัน) และเราทั้งคู่มองดูมันแล้วบอกว่า WTF?
จิม A

20

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

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


3
ฉันเพิ่งลบรหัสความเห็นเก่า ๆ จำนวนมากเมื่อเร็ว ๆ นี้
CoderDennis

2
ฉันมักจะลบรหัสความเห็นนอกเสียจากว่ามันจะมาพร้อมกับคำอธิบายที่ดีว่าทำไมมันถึงได้รับความคิดเห็นและทำไมมันควรจะถูกเก็บไว้ในสถานที่
Jeremy Wiebe

ฉันเห็นด้วยอย่างยิ่ง การใส่โค้ดความคิดเห็นตราบใดที่คุณทำงานด้วยก็โอเค แต่ทุกสิ่งที่เข้าสู่รุ่น / สาขาหลักควรเป็นโมฆะของรหัสที่แสดงความคิดเห็น มีคนบอกฉันว่าพวกเขา "ชอบที่จะรู้ว่ามันจะแตกต่างกันอย่างไร" ฉันเพิ่งพบว่ามันน่ารำคาญสำหรับเหตุผลที่กล่าวถึง: นั่นเป็นสิ่งที่ล้าสมัยวิธีแก้ปัญหาวิธีอื่นที่จะทำหรือไม่ WTF
Anne Schuessler

ด้วย VS2013 "Peeks" นี่คือทั้งหมดที่ออกไปนอกหน้าต่าง แต่เราใส่ความคิดเห็นที่ระบุว่า "การเปลี่ยนแปลงสมการ - ชื่อย่อ" หรือบางสิ่งบางอย่างดังนั้นใครบางคนสงสัยว่ารหัสเก่าจะมีลักษณะอย่างไรใน TFS / VCS หากพวกเขาต้องการ ดังนั้นจึงเป็นหนึ่งบรรทัดแทน 10 บรรทัดที่มีการออกความเห็น แต่ VS2013 ยอดเยี่ยมมากมันแสดงให้เห็นประวัติศาสตร์ TFS ที่นั่นสำหรับคุณ
Suamere

17

มาตรฐานการเข้ารหัสที่แย่ที่สุดที่ฉันเคยเข้าร่วมคือเบสโค้ดที่ไม่มีเลย ฉันควรทำตามมาตรฐานการเข้ารหัสที่ฉันไม่เห็นด้วยอย่างสมบูรณ์กว่าการทำงานในฐานรหัสที่ไม่มีเลย มันทำให้การเรียนรู้ส่วนใหม่ ๆ ของโค้ดเบสนั้นยากขึ้นมาก


16

การบังคับความคิดเห็นแบบอินไลน์สำหรับการควบคุมเวอร์ชันเป็นเรื่องของมาตรฐานการเข้ารหัสที่ไม่มีจุดหมายมากที่สุดที่ฉันเพิกเฉย

//Changed on 2/2/2004 By Ryan Roberts for work item #2323332
Dim Some Horrendous VB
//End Changed

Oracle DBA ที่ยืนยันในการใช้ที่ถูกต้องของช่องว่างในขณะที่ 'รักษา' ฐานข้อมูลที่มีตาราง contended สูงที่มีมากกว่า 200 สาขาและ 40 ทริกเกอร์เข้ามาใกล้


นั่นเป็นสิ่งที่เลวร้ายมาก
Evan Plaice

5
อืมมม ติ่มซำ ...
กำหนดค่า

ฉันทำสิ่งนี้ก่อนที่เราจะควบคุมแหล่งที่มาแน่นอน เมื่อเรามีการควบคุมแหล่งที่มามันเป็นนิสัยเช่นนั้นเราต้องการการแทรกแซงเพื่อให้ทีมหยุดทำ ในที่สุดเราก็หยุดและลบสิ่งที่มีอยู่ทั้งหมดเมื่อเราพบมัน
Scott Whitlock

นักพัฒนาอาวุโสของเรายังคงพยายามบังคับให้เราทำเช่นนี้ ฉันเพิกเฉยต่อนโยบายเมื่อใดก็ตามที่ฉันคิดว่าฉันสามารถหนีไปได้ (และบางครั้งเมื่อฉันรู้ว่าฉันไม่สามารถทำได้)
Joshua Smith

เรามีคนในทีมของเราที่ยังคงทำสิ่งนี้ทุกที่ (เขายังรวมถึงสิ่งที่ "Change Log" ขนาดใหญ่ในสคริปต์ SQL ของเราซึ่งอยู่ภายใต้การควบคุมเวอร์ชัน) อาร์กิวเมนต์ตามที่อธิบายให้ฉันฟังคือหลังจากการเปลี่ยนแปลง / คอมมิตไม่กี่ครั้งคุณไม่จำวันที่มีการเปลี่ยนแปลงดังนั้นบันทึกการเปลี่ยนแปลงจึงเป็นเรื่องดีที่จะสังเกตเห็นทันทีว่าใครเปลี่ยนอะไรและทำไมเมื่อคุณเปิดไฟล์
Wayne Molina

14

ฉันทำการตรวจสอบโค้ดในโปรเจ็กต์ที่นำโดยตัวจับเวลาแรกของ C ++ ที่ตัดสินใจว่าฟังก์ชั่นสมาชิกคลาสทั้งหมดควรนำหน้าด้วยชื่อคลาสและการมองเห็น:

class MyClass
{
   public:
      void MyClass_Public_setValue(int value);
}

1
ไม่คุณถามพวกเขาว่าทำไม ? ฉันแค่อยากรู้แรงจูงใจของพวกเขา ..
JBRWilkinson

1
ว้าวทำไมผู้ชายคนนั้นถึงใช้คลาส ?
Mateen Ulhaq

9

จะต้องเยื้องรหัสทั้งหมดโดยสี่ช่องว่าง;)


2
มันเลวร้ายขนาดไหน?
Jay Bazuzi

1
เพราะทุกบรรทัดมีช่องว่างที่ไม่จำเป็น 4 จุดในตอนแรกหรือไม่
nohat

โอ้ฉันเข้าใจแล้ว
ทางเลือก

21
ใช่ StackOverflow มีมาตรฐานการเข้ารหัสที่ไม่ดีจริงๆ :-)
P Shved

เยื้องขนาดใหญ่บังคับให้คุณรักษาระดับการซ้อนของโค้ดให้ต่ำ ฉันได้เห็นการเยื้องของ 8 และทำงานได้ดี
Toon Krijthe

9

ฉันมีงานหลายปีก่อนที่รหัสของเราทั้งหมดจะต้องจัดชิดซ้าย - ไม่เยื้อง ผู้ชายที่มาพร้อมกับนโยบายนั้นไม่ชอบเลื่อนไปมาในแนวนอนเมื่อดูรหัสยาว ๆ ซึ่งเท่ากับว่ามันเล่นปิงปองด้วยสายตาของเขา


นั่นเป็นมาตรฐานการเข้ารหัสที่น่ากลัวและน่ากลัวที่ต้องทำตาม และเหตุผลที่โง่เขลาเช่นกัน!
gablin

4
หากคุณต้องการเลื่อนในแนวนอน (เช่นมากกว่าครึ่งหน้า) อาจมีบางอย่างผิดปกติเช่นกัน ไม่เยื้องไม่ดีอย่างใดอย่างหนึ่งเพราะมันทำให้รหัสไม่สามารถอ่านได้อย่างสมบูรณ์ ฉันพยายามติดกับขีด จำกัด 78-col แต่ถ้าจำเป็นต้องใช้มากกว่าจำนวนที่ฉันไม่รังเกียจ แต่ฉันพยายามหลีกเลี่ยง
Htbaa

8

นี่เป็นตัวอย่างเพิ่มเติมว่าการไม่มีมาตรฐานการเข้ารหัสสามารถทำให้เกิดความเสียหายได้อย่างไร

ผู้รับเหมาที่ทำงานในธนาคารขนาดใหญ่ยืนยันว่าการปฏิบัติตามมาตรฐานนั้นดีที่สุดเท่าที่เคยมีมา แอปพลิเคชันนี้เขียนด้วย dBase / Clipper ซึ่งเขาเป็นผู้พัฒนาเพียงผู้เดียวและแน่นอนว่าเขาได้มาตรฐาน

  • ทุกอย่างเป็นตัวพิมพ์ใหญ่ ฉันหมายถึงทุกอย่างรวมถึงความคิดเห็นที่หายากที่เขาทำ
  • ไม่มีการเยื้อง
  • การตั้งชื่อตัวแปรเป็นบางสิ่งบางอย่างตามแนวของ APRGNAME A = ขอบเขตของตัวแปรเช่น P สำหรับสาธารณะ PRG = อักขระสามตัวแรกของไฟล์ต้นฉบับที่สร้างตัวแปร NAME = ชื่อตัวแปรใน 6 ตัวอักษรที่เหลือที่อนุญาตให้ dBase / Clipper
  • บรรทัดซอร์สโค้ด 4 และ 4 บรรทัดแรกมีความยาว 80 * ทำไม? ดังนั้นเขาจึงได้ยินเสียงเครื่องพิมพ์ดอทเมทริกซ์เริ่มต้นและสิ้นสุดการพิมพ์ไฟล์ หน่วยความจำคือโปรแกรมทั้งหมดที่พิมพ์ผ่านเมนเฟรมประจำสัปดาห์ 20,000 หน้า
  • ฉันแน่ใจว่ามีอีกมากมายที่ฉันสามารถถ่ายโอนข้อมูลจากสมองของฉันได้

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

และใช่เราบอกผู้บริหารว่าการปฏิบัติเหล่านี้ไม่ดี แต่มักได้รับตามปกติ "จ่ายเงินให้กับผู้รับเหมารายนี้เขาต้องรู้ว่าเขากำลังพูดถึงอะไร"


7
อย่าล้อเลียนไดโนเสาร์ที่มีอายุมากกว่าได้โปรด พวกเขาทำให้เราเป็นไปได้
P Shved

4
ดูเหมือนความปลอดภัยในงาน
MIA

7
มีเครื่องหมายเสียงเพื่อให้คุณทราบเมื่อไฟล์แต่ละไฟล์กำลังพิมพ์อย่างชาญฉลาด ฉันจะเพิ่ม\07ไปยังจุดเริ่มต้นของแต่ละไฟล์ทันที
กำหนดค่า

2
การใช้รูปแบบการตั้งชื่อเช่นนี้ (ไม่ใช่ตัวพิมพ์ใหญ่) ทำให้รู้สึกว่ากฎ "การกำหนดขอบเขต" ของ dBase นั้นไม่มีอยู่จริง ทุกอย่างเป็นสากลอย่างมีประสิทธิภาพ iใช้เพื่อดัชนีอาร์เรย์ในขั้นตอนหนึ่งอาจรบกวนกับiในขั้นตอนการเรียกร้อง คุณต้องใช้PRIVATE ALL LIKE m*และPRIVATE iป้องกัน "แชโดว์" นี้
Gerry

8

อีกหนึ่งระเบิดจากอดีตของฉัน

อ้างจากเจ้าของ บริษัท :

จะไม่มีการเขียนโค้ดโดยใช้ภาษาที่สื่อความหมายเพราะฉันทำ 25 ล้านในโครงการ {expletive} ที่เขียนด้วยภาษาจาวา

โครงการ Java เป็นระบบการซื้อขายหุ้นที่ออกแบบมาเพื่อจัดการกับหุ้นไม่กี่โหลซึ่งตอนนี้ถูกใช้เพื่อประมวลผลหลายพันรายการ แทนที่จะต้องจัดการกับข้อบกพร่องในการออกแบบหรือฮาร์ดแวร์ที่ไม่ดีทั้ง บริษัท ถูกบังคับให้เปลี่ยนแอพพลิเคชั่นที่ไม่ใช่ C / C ++ เป็น C / C ++ และการพัฒนาใหม่ทั้งหมดจะต้องอยู่ใน C / C ++ ภาษาที่สื่อความหมายแปลว่าอะไรที่ไม่ได้รวบรวมไว้และเจ้าของพิจารณาว่า Assembler, C และ C ++ ที่คอมไพล์แล้วเท่านั้น

สำหรับ บริษัท 800 คนซึ่งส่วนใหญ่ของรหัสอยู่ใน Java และ Perl นี่หมายความว่าทั้ง บริษัท ใช้เวลาส่วนใหญ่ในสองสามปีถัดไปในการเขียนโค้ดที่สมบูรณ์แบบใน C / C ++

ตลกพอเมื่อยี่สิบปีก่อนความล้มเหลวนี้ฉันอยู่ที่ บริษัท อื่นซึ่งผู้นำทางด้านเทคโนโลยีตัดสินใจว่าตรรกะการเรียงลำดับของเรา (มันเป็น Bubble Sort) จำเป็นต้องได้รับการบันทึกในแอสเซมเบลอร์แทนการแทนที่ด้วย Quick Sort เพราะ - อัลกอริทึม ไม่ปรับปรุงประสิทธิภาพ วิธีเดียวในการปรับปรุงประสิทธิภาพคือการเขียนตรรกะเดียวกันในแอสเซมเบลอร์

ในทั้งสองกรณีฉันจากไปไม่นานหลังจากผู้บงการลงมา


วันนี้ บริษัท ทั้งสองยังทำงานอยู่หรือไม่?
finnw

ตัวที่ 'ย้าย' ออกจากจาวาคืออีกอันหนึ่งนั้นหายไปนาน พวกเขาไม่รอดจากการย้ายจาก TRS-80 ไปยังพีซี
David B

6

เช่นโปรแกรมเมอร์จำนวนมาก (แต่ไม่เพียงพอ) ฉันเกลียดการตกแต่งโค้ด มันทำให้ฉันโมโหเมื่อฉันต้องใช้คำนำหน้าเครื่องหมายดอลลาร์ ($) สำหรับชื่อตัวแปรหรือขีดเส้นใต้สำหรับตัวแปรส่วนตัวแม้จะไม่มี getters / setters หากคุณจำเป็นต้องตกแต่งโค้ดให้คุณเข้าใจแล้วคุณต้องกำจัดนรกออก!


ดีตามที่ "จะ" พูดว่า "ฉันเติมท้ายด้วยเครื่องหมายขีดล่างเพื่อให้ตัวแปรส่วนตัวของฉันถูกจัดกลุ่มใน intellisense ของฉันอย่างไรก็ตามฉันจะทำเช่นนี้สำหรับตัวแปรที่กำหนดขอบเขตให้เป็นประเภทตัวแปรที่ประกาศภายในเมธอดหรือขอบเขตที่แคบลง ปิดทำให้ง่ายต่อการแยกพวกมันและทำให้ตัวแปรที่ใช้น้อยกว่าอยู่ด้วยกัน " และฉันต้องเห็นด้วยกับเขา
7wp

1
ฉันไม่คิดว่าการจัดกลุ่มตัวแปรของคุณเข้าด้วยกันใน IDE ที่คุณชื่นชอบนั้นเป็นเหตุผลที่ดีที่จะทำให้โค้ดของคุณหมดไป
Adam Harte

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

1
+1 การใช้ IDE ที่ดี (อันที่สามารถใช้การค้นหา regex ) ได้ดีกว่าสำหรับฉัน Scratch IDE เรียนรู้การใช้โปรแกรมแก้ไขข้อความและเทอร์มินัลและคุณจะเป็นโปรแกรมเมอร์ที่ดีขึ้นมาก ในฐานะที่เป็นหมายเหตุด้านข้างฉันไม่ชอบ perl sigils เป็นพิเศษ แต่อย่างน้อยพวกเขาก็ใช้งานได้ซึ่งแตกต่างจาก PHP
ทางเลือก

6
เฮ้อ ... อีกอันหนึ่งของ "IDE's นั้นมีไว้สำหรับคนที่คลั่งไคล้"
Nailer

6

ฉันทำงานกับระบบเว็บมาระยะหนึ่งแล้วซึ่งพารามิเตอร์ทั้งหมดที่ส่งผ่านจะต้องมีชื่อว่า P1, P2, P3 และอื่น ๆ ไม่มีโอกาสที่จะได้รู้ว่าพวกเขาอยู่ที่ไหนโดยไม่มีเอกสารประกอบ

นอกจากนี้ - แม้ว่าจะไม่ได้มาตรฐานการเข้ารหัสอย่างเคร่งครัด - ในระบบเดียวกันทุกไฟล์เดียวจะต้องมีชื่อว่า xyz0001.ext, xyz0002.ext, xyz0003.ext ฯลฯ - โดยที่ xyz เป็นรหัสสำหรับแอปพลิเคชันในตัวเอง


6

นี่เป็นเวลานานมาแล้ว - ปี 1976 ที่แน่นอน เจ้านายของฉันไม่เคยได้ยิน Edsger Dijkstra หรืออ่านปัญหาของ CACM แต่เขาเคยได้ยินข่าวลือจากที่หนึ่งว่า "GOTO ไม่ดี" ดังนั้นเราจึงไม่ได้รับอนุญาตให้ใช้ GOTO ในโปรแกรมภาษาโคบอลของเรา นี่คือก่อนที่ COBOL จะเพิ่ม "end if" ดังนั้นในเวลานั้นมีเพียงสองและครึ่งหนึ่งของโครงสร้างการควบคุมแบบคลาสสิกทั้งสาม (ลำดับถ้า / จาก / อื่นดำเนินการ เขาอนุญาตให้ GOTO อย่างไม่เต็มใจในโปรแกรมพื้นฐานของเราและคำแนะนำสาขาในโปรแกรมภาษา Assembler ของเรา

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


6

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

private string DoSomething( bool verbose )
{
    if ( verbose ) { return someString; }
    else if ( !verbose ) { return otherString; }
    else { return string.Empty; }
}

แม้แต่ReSharperก็บอกคุณว่านี่มันผิด!


9
คุณจะกดยากที่จะคืนบางสิ่งบางอย่างจากฟังก์ชั่นที่ประกาศว่าเป็นโมฆะ
Mircea Chirea

7
@MttB พิจารณาภายใต้เงื่อนไขว่าelseสาขาสุดท้ายจะเป็นอย่างไร
Richard

6
อื่น {ส่งคืนสตริงว่างเปล่า; } จะดำเนินการเมื่อ 2 บรรทัดข้างต้นได้รับการแก้ไขโดยนักพัฒนาบำรุงรักษา 5 ปีนับจากนี้ อย่างไรก็ตามการส่งคืนสตริงส่วนเกินจะซ่อนความจริงที่ใช้เป็นเงื่อนไขที่เป็นไปไม่ได้ ควรโยน InvalidOperationException แทน ("รหัสนี้ไม่ได้มีไว้เพื่อสนับสนุนตรรกะค่าสามค่า");
MatthewMartin

1
นี่มันสุดยอดมาก มีอะไรผิดปกติกับreturn verbose ? someString : someOtherString;?
Callum Rogers

1
@callum ผู้ประกอบการ Ternary อาจถูกแบน :) เคยไปที่นั่นมาก่อน ...
hplbsh

6

ในงานสุดท้ายของฉัน "มาตรฐาน" จะเป็นคำที่แข็งแกร่งมากสำหรับสิ่งที่ฉันได้รับจากคนที่จ้างฉัน เว็บไซต์การเขียนโปรแกรมในColdFusionและ SQL ฉันได้รับข้อกำหนดการเข้ารหัสเช่น:

  • อย่าใช้รวมถึง ฉันชอบหน้าใหญ่หนึ่งหน้า
  • แยกคำในชื่อตัวแปรและคอลัมน์ด้วยเครื่องหมายขีดล่างเสมอ (ยกเว้น isactive, firstname เป็นต้น)
  • อย่าใช้ตัวย่อ - เขียนชื่อแรกเสมอ (เขามักจะเขียนชื่อและอื่น ๆ )
  • อย่าใช้ชื่อที่สับสน (เช่น amount_charged และ charge_amount ซึ่งวัดได้ต่างกัน แต่เกี่ยวข้องกัน)
  • อย่าใช้DIVและใช้CSSขั้นต่ำ- ใช้ตารางที่ซ้อนกันแทน (ฉันพบว่ามีหกชั้นลึกลงไปหนึ่งครั้ง)
  • อย่าแคชแบบสอบถามใด ๆ เคย
  • จะใช้ตัวแปรมากกว่าหนึ่งหน้าหรือไม่ ขอบเขตแอปพลิเคชัน
  • แต่ละหน้าเป็นบล็อคลอง / จับของตัวเอง เราไม่ต้องการ / ต้องการเครื่องมือจัดการข้อผิดพลาดทั่วโลก

ฉันเริ่มเปลี่ยนสิ่งเหล่านี้ทันทีที่เขาเลิก


"อย่าใช้ชื่อที่สับสน" ดูเหมือนจะยุติธรรมสำหรับฉัน ...
8128

1
มันเป็นแนวทางที่ยุติธรรมอย่างแน่นอน ประเด็นของฉันคือเขาไม่ได้ติดตามเลย ฉันเดาความคิดของเขาที่ว่า "ไม่สับสน" และฉันก็ต่าง
Ben Doom

4

ในชีวิตของฉันในฐานะ C ++ coder มีการบังคับใช้ "กฎ" ที่น่ารังเกียจจริงๆสองประการ:

  1. "เราไม่สามารถใช้ STL ได้เนื่องจาก VC ++ 4.1 ไม่รองรับ (และเราไม่สามารถเปลี่ยนเป็น VC ++ 6.0 ได้ในขณะนี้)"
  2. "ไม่ไม่ใช้ QuickSort เพราะมันสามารถเป็น O (n ^ 2) ในกรณีที่ไม่ดีใช้การดำเนินการตามขั้นตอนวิธีการ heapsort ฉัน (ชื่อหัวหน้าโครงการลบ) เขียนเป็นนักเรียนนี้".

6
เกิดอะไรขึ้นกับ HeapSort ของผู้นำโครงการ?
7wp

4
จริง ๆ แล้วถ้ารหัสที่รับเข้าจากผู้ใช้ภายนอก QuickSort อาจผิดเมื่อเปิดการO(n^2)โจมตีของ DOS (ป้อนข้อมูลให้ตัวพิมพ์เล็กที่สุด) ทำไมมันถึงเป็นไปไม่ได้ที่จะเปลี่ยน - มันเป็นข้อแก้ตัวที่ถูกต้องหากไม่ใช้ STL
Maciej Piechotka

4

ฉันถูกบังคับให้มีเอกสาร XML สำหรับชั้นเรียนและสมาชิกชั้นเรียนทั้งหมด รวมถึงส่วนตัว ฉันได้รับการสนับสนุนให้ใช้ความคิดเห็น ghostdoc เริ่มต้น

public class User 
{
    /// <summary>
    /// the _userID
    /// </summary>
    private int _userID;
}

คล้ายกับคำตอบก่อนหน้านี้มาก
finnw

ใช่. ทั้งหมดที่ฉันต้องแสดงความคิดเห็นสมาชิกส่วนตัวด้วย ซึ่งทำให้รู้สึกน้อยลง
Carl Bergquist

สนับสนุนให้ใช้ ghostdoc หรือไม่! Gah
กำหนดค่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.