อะไรคือสิ่งที่ดึงดูดความสนใจของชาวฮังการี [ปิด]


18

ในสิ่งที่ตั้งชื่อแนวทางใดที่คุณทำตาม? ผู้เขียนพูดว่า:

นอกจากนี้ฉันชอบเขียนโค้ดโดยใช้สัญกรณ์ฮังการีจาก Charles Simonyi

ฉันทำงานกับโปรแกรมเมอร์หลายคนที่ยังคงชอบใช้ภาษาฮังการีซึ่งส่วนใหญ่เป็นรสชาติของ Petzold / Systems Hungarian dwLength = strlen(lpszName)คิด

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

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

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

ฉันอยากได้ยินจากใครที่ยังใช้มันอยู่ ทำไมคุณใช้มัน มันอยู่ในมาตรฐานของคุณหรือไม่ คุณจะใช้มันหรือไม่ถ้าไม่จำเป็น? คุณจะใช้มันในโครงการใหม่หรือไม่? คุณเห็นว่าอะไรคือข้อดี?


5
สัญกรณ์ฮังการีเป็นความโกรธเมื่อฉันเริ่มต้นในไอที แต่มันเป็นสภาพแวดล้อมที่เข้ารหัสอย่างสมบูรณ์ ตัวแก้ไขข้อความอย่างง่ายไม่มีการเน้นไวยากรณ์, Intellisense และไฟล์โค้ดที่มีความยาวหลายร้อยบรรทัดพร้อมกับตัวแปรทั้งหมดที่ประกาศไว้ในตอนต้น มันทำให้ชีวิตง่ายขึ้นในการกำจัดสิ่งที่คุณกำลังทำอยู่ อย่างไรก็ตามด้วยเครื่องมือและการปฏิบัติที่ทันสมัยความต้องการที่เพิ่มขึ้นได้กลายเป็นทางเลือกของฉันและควรมอบให้กับประวัติศาสตร์
จริงๆ

1
ฉันใช้เมื่อหลายปีก่อนและไม่เคยชอบมันมาก ฉันไม่ควรพลาดเลย
MetalMikester

imo ปัญหาที่ใหญ่ที่สุดกับมันคือการใช้คำนำหน้ามากกว่าคำต่อท้าย - แม้ในแอปฮังการี 'หูด' มักจะมีข้อมูลความหมายน้อยกว่าส่วนที่เหลือของชื่อ
jk

คำตอบ:


38

ในขณะที่ฉันยังคงใช้ฮังการีสำหรับว่าเหตุผลที่สาม , รอบคอบหลีกเลี่ยงมันสำหรับทุกอย่างอื่น:

  1. เพื่อให้สอดคล้องกับรหัสฐานที่มีอยู่เมื่อทำการบำรุงรักษา
  2. สำหรับการควบคุมเช่น "txtFirstName" เรามักจะต้องแยกแยะระหว่างตัวควบคุม (พูด) "firstName" ค่าและ "firstName" ตัวควบคุม ชาวฮังการีให้วิธีที่สะดวกในการทำเช่นนี้ แน่นอนฉันสามารถพิมพ์ "firstNameTextBox" แต่ "txtFirstName" นั้นง่ายต่อการเข้าใจและมีตัวอักษรน้อยกว่า นอกจากนี้การใช้ภาษาฮังการีหมายถึงการควบคุมประเภทเดียวกันนั้นหาง่ายและมักจะจัดกลุ่มตามชื่อใน IDE
  3. เมื่อตัวแปรสองตัวมีค่าเดียวกัน แต่ต่างกันตามประเภท ตัวอย่างเช่น "strValue" สำหรับค่าที่พิมพ์โดยผู้ใช้จริงและ "intValue" สำหรับค่าเดียวกันเมื่อมีการแยกวิเคราะห์เป็นจำนวนเต็ม

แน่นอนว่าฉันไม่ต้องการตั้งค่าความคิดของฉันให้เป็นแนวปฏิบัติที่ดีที่สุด แต่ฉันปฏิบัติตามกฎเหล่านี้เพราะประสบการณ์บอกฉันว่าการใช้ความสามารถในการบำรุงรักษารหัสสิทธิประโยชน์ฮังการีเป็นครั้งคราว แต่มีค่าใช้จ่ายเพียงเล็กน้อย ที่กล่าวว่าฉันตรวจสอบการปฏิบัติของตัวเองอย่างต่อเนื่องดังนั้นอาจทำสิ่งที่แตกต่างกันตามความคิดของฉันพัฒนา


ปรับปรุง:

ฉันเพิ่งอ่านบทความเชิงลึกโดย Eric Lippert อธิบายว่าชาวฮังการีสามารถช่วยทำให้โค้ดผิดดูผิดได้อย่างไร คุ้มค่าที่จะอ่าน


คำตอบที่ดีเลิศหิ่งห้อยตอบคำถามที่ถาม
AShelly

เพิ่งสังเกตเห็นการแก้ไขความคิดสร้างสรรค์ของ iPhone ของฉัน ... gsub ('firefly', 'เต็มที่');
AShelly

5
+1 สำหรับการใช้เสมือนฮังการีเพื่ออำนวยความสะดวกในการจัดกลุ่มการควบคุม UI ใน IDE นี่เป็นเพียงการใช้งานที่ยังคงสมเหตุสมผลสำหรับโครงการใหม่และฉันก็ไม่สามารถอยู่ได้โดยปราศจากมัน ฉันมักจะรู้ว่าตัวควบคุมเป็นกล่องข้อความ แต่ไม่ทราบว่าเป็นชื่อ "FirstName" หรือเพียงแค่ "ชื่อ"
โคดี้เกรย์

2
ฉันเห็นด้วยกับคำตอบนี้ เกี่ยวกับการใช้ intValue และ strValue คุณสามารถเห็นมันเป็น valueAsInt และ valueAsStr ดังนั้นฉันไม่รู้ว่าฉันพิจารณาสัญกรณ์ฮังการีนี้หรือไม่มันเป็นเหมือน int และ str เป็นส่วนหนึ่งของชื่อตัวแปร
Michel Keijzers

2
2ฉันชอบส่วนต่อท้ายแบบเต็มเพราะคำนำหน้าอาจดูงี่เง่า (อะไรคืออะไรtssbหรือ a tsddi? ตัวย่อยังมีปัญหาเรื่องความสม่ำเสมอซึ่งTextBoxอาจมีความไม่สอดคล้องกันเกี่ยวกับว่ามันเป็นtbหรือtxt(ฉันได้เห็น 'dev' รุ่นอาวุโส 'ใช้ทั้งในหน้าต่างเดียว) สำหรับ3ฉันวางฮังการีเมื่อตัวแปรถึงประเภทที่ตั้งใจไว้สุดท้าย (เช่นฉันจะใช้valueและstrValueในตัวอย่างของคุณ)
Jonathan Dickinson

6

ฉันไม่ใช่แฟนตัวยงของการใช้สัญลักษณ์ฮังการี แต่คิดแบบนี้:

  • นอกจากนี้เรายังสามารถสังเกตเห็นว่าการค้นหาสตริงที่อ้างถึงกล่องข้อความในรหัสของคุณเร็วขึ้น: โดยพิมพ์ "txt" ในช่องค้นหาของคุณ

ไม่คิดตรงกันข้ามทุกองค์ประกอบมีชื่อของมันเอง มันอาจช้ากว่าที่คุณจะค้นหาว่าคุณต้องการไปทางไหน?

เช่นเดียวกันสำหรับ ddl เมื่อเราต้องการอ้างถึง DropDownList มันง่ายขึ้นหรือไม่ :)

ผู้คนจะไม่ใช้เวลามากในการค้นหาว่าองค์ประกอบนี้อยู่ที่ไหน

การใช้คำนำหน้าใช้ไม่ได้สำหรับคอมไพเลอร์ภาษาสมัยใหม่เช่น C # แต่สามารถใช้งานได้ (อ่านได้)สำหรับมนุษย์


นี่คือตัวอย่างที่ดีที่สุดของมูลค่าการปฏิบัติที่ฉันเคยได้ยิน (แต่ก็ยังไม่เพียงพอที่จะทำให้ฉันรับเป็นลูกบุญธรรม :)
ASHelly

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

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

4

Apps Hungarian (แท็กเพื่อแสดงคุณสมบัติเชิงความหมายของวัตถุที่ไม่สามารถแสดงออกผ่านระบบพิมพ์ได้) เป็นวิธีที่เหมาะสมในการจัดการกับข้อผิดพลาดทั่วไปเมื่อใช้ภาษาที่พิมพ์ไม่คล่องในช่วงต้นทศวรรษ 1980 พวกเขาให้บริการวัตถุประสงค์เล็ก ๆ น้อย ๆ ในภาษาที่พิมพ์อย่างรุนแรงของวันนี้

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

สไตล์ทั้งสองมีต้นกำเนิดมาจาก Microsoft ทุกวันนี้อนุสัญญาการตั้งชื่อของ Microsoft แบ่งออกเป็นหมวดหมู่ว่า "อย่าใช้สัญกรณ์ฮังการี"


4

หากคุณใช้ระบบคำนำหน้าอย่างถูกต้องคุณสามารถกระจายการสึกหรอของคีย์ซึ่งจะลดการใช้จ่ายสำหรับคีย์บอร์ดทดแทน


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

ในทางกลับกันฉันได้ใช้ตัวแปรที่ไม่มีการตกแต่ง แต่มีชื่อดีใน 'รหัสบ้าน' ของฉันมานานพอ ๆ กัน ฉันไม่เคยพลาด SH

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

ดังนั้นโดยสรุปความแตกต่างเดียวที่ฉันเห็นคือการสึกหรอบนคีย์บอร์ดของคุณ


1
ชอบถากถางมี :)
JohnL

4

ฉันเริ่มใช้ SH ในรหัสใหม่ที่ฉันเขียนในเดือนนี้

งานที่มอบหมายของฉันเกี่ยวข้องกับการเขียนโค้ด Perl บางตัวใน JS เพื่อให้สามารถย้ายไปยังฝั่งไคลเอ็นต์ของเว็บแอปพลิเคชันของเรา ใน Perl โดยทั่วไป SH ไม่จำเป็นเนื่องจาก sigils ($ string, @array,% hash)

ใน JavaScript ฉันพบว่า SH มีประโยชน์ต่อการติดตามประเภทของโครงสร้างข้อมูล ตัวอย่างเช่น,

var oRowData = aoTableData[iRow];

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

tl; dr: SH สามารถทำได้ดีมากเมื่อคุณมีรหัสที่ซับซ้อนในภาษาที่พิมพ์ไม่ได้ แต่ถ้า IDE ของคุณสามารถติดตามประเภทได้


2

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


2
รหัส C ++ ไม่ได้เป็นเช่นนี้เสมอไป - ตรวจสอบหนังสือ Bjarne Stroustrup
JBRWilkinson

@JBRWilkinson: Charles Simonyi ได้สร้างสัญลักษณ์ของฮังการีในปี 1976 ( c2.com/cgi/wiki?HungarianNotation ) สัญกรณ์นี้จริง ๆ แล้วลงวันที่ C ++ มีโปรแกรมเมอร์มากมายหากไม่ใช่โปรแกรมเมอร์ C ++ ส่วนใหญ่ที่ใช้งานมาตั้งแต่วันที่ 1 (ของการเขียนโปรแกรมนั่นคือ) ฉันเข้าใจว่า Bjarne Stroustrup เป็นข้อยกเว้นที่น่าสังเกตดังนั้น Linus Torvalds ก็เป็นเช่นนั้น แต่มันก็ไม่เปลี่ยนความจริง
Paweł Dyda

2
ฉันคิดว่าชาวฮังกาเรียนเป็นสิ่งพื้นฐานของ Microsoft เสมอ ฉันไม่เห็นมันใช้อะไรมากในสภาพแวดล้อม Unix และ Unix
David Thornley

2

สัญกรณ์ระบบของฮังการีเป็นจริงขึ้นมาเล็กน้อยซึ่งเป็นความเข้าใจผิดของคำว่า 'ประเภท' นักพัฒนาระบบใช้ชื่อประเภทคอมไพเลอร์ (คำ, ไบต์, สตริง, ... ) ซึ่งตรงข้ามกับประเภทโดเมนแอป (ดัชนีแถว, ดัชนีคอลัมน์, ... )

แต่ฉันเดาว่านักพัฒนาทุกคนต้องผ่านหลายเฟสของสไตล์ที่ดูเหมือนเป็นไอเดียที่ยอดเยี่ยมในเวลานั้น (และประเภทของคำนำหน้าดูเหมือนจะเป็นความคิดที่ดีสำหรับมือใหม่) ก่อนที่จะตกลงไปในหลุมพราง ฯลฯ ) ดังนั้นผมคิดว่ามีเป็นแรงเฉื่อย: <windows.h>จากนักพัฒนาที่ไม่ได้ดีกว่าและรู้ว่าทำไมมันเป็นทางเลือกที่ดีจากนักพัฒนาติดอยู่กับมาตรฐานการเข้ารหัสที่อาณัติการปฏิบัติและจากคนที่ใช้ มันแพงเกินไปที่ Microsoft จะเปลี่ยนเพื่อกำจัดเครื่องหมายคำนำหน้า (ซึ่งไม่ถูกต้องในหลาย ๆ สถานที่: WPARAM?)


1
แม้แต่การใช้งานที่ตั้งใจไว้ก็ยังน้อยกว่าความเหมาะสมเพราะมันสร้างระบบประเภทส่วนตัวที่คอมไพเลอร์ไม่ทราบดังนั้นจึงไม่สามารถพิมพ์การตรวจสอบได้
Larry Coleman

@ Larry: แม้ว่ามันจะเป็นจริง แต่ก็มีซอฟต์แวร์ที่สามารถแยกวิเคราะห์ซอร์สโค้ดและตรวจสอบว่ารหัสนั้นสอดคล้องกับมาตรฐานหรือไม่ พวกเขาอาจจะมั่นใจได้ว่าคำนำหน้าตรงกันในนิพจน์
Skizz

1
อุดมคติของฉันเมื่อใช้การพิมพ์แบบสแตติกคือให้ชุดประเภทคอมไพเลอร์เป็นชุดของชุดประเภทโดเมน จากนั้นคอมไพเลอร์สามารถตรวจสอบทุกอย่างโดยไม่จำเป็นต้องใช้แอดออน
Larry Coleman

0

มีสิ่งหนึ่งที่คนฮังการีขาดหายไป สัญกรณ์ฮังการีใช้งานได้ดีกับการเติมข้อความอัตโนมัติ

สมมติว่าคุณมีตัวแปรและชื่อคือ intHeightOfMonster

สมมติว่าคุณลืมชื่อของตัวแปร

มันอาจเป็นความสูงของมอนสเตอร์หรือ MonsterHeight หรือการวัดมอนสเตอร์ความสูง

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

เมื่อรู้ว่า heightOfMonster นั้นเป็น int คุณก็แค่พิมพ์ i และ voila

ประหยัดเวลา.

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