การดิ้นรนเพื่อไม่ใช้สัญกรณ์ฮังการี


10

ผมเคยเห็นการขัดแย้งและการต่อต้านระบบฮังการี เป็นเวลาหลายปีที่ฉันได้ทำงานในโครงการแบบดั้งเดิมที่ใช้ระบบนี้โดยการตั้งชื่อตัวแปรทุกตัวทำงานด้วยคำนำหน้าของประเภทตัวแปรเช่น (strName, intAge, btnSubmit ฯลฯ ) (ฉันรู้ว่าคำนำหน้าแอพภาษาฮังการีต้นฉบับตามประเภท ตัวแปรไม่ใช่ชนิด) ฉันต้องการให้โครงการต่อไปของฉันละทิ้งไปอย่างสมบูรณ์ แต่ฉันคิดว่ามันยากกว่าที่จะบอกชื่อของสิ่งที่คล้ายกันโดยไม่ต้องใช้มัน

ให้บอกว่าฉันมีรูปแบบเว็บสำหรับรวบรวมที่อยู่อีเมลและเก็บไว้ในตารางฐานข้อมูลและปุ่มที่เรียกใช้ฟังก์ชันที่บันทึกที่อยู่ลงในฐานข้อมูล

หากฉันใช้สัญกรณ์สไตล์ฮังการีผมอาจจะเรียกกล่องtxtEmailปุ่มและความคุ้มค่าที่มีอยู่ในช่องbtnEmail strEmailฉันอาจใช้ฟังก์ชันstoreEmail(strEmail)เพื่อเก็บอีเมล ฉันมีการประชุมที่ชัดเจนที่นี่มันชัดเจนว่าแต่ละตัวแปรคืออะไร

อะไรจะเป็นการปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อตัวแปรเหล่านี้

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

2
อาจมีบางอย่างผิดปกติกับส่วนที่เหลือของข้อตกลงการตั้งชื่อหรือขนาดของฟังก์ชั่นของคุณหากคุณมีปัญหาในการหาชื่อที่ไม่ซ้ำ

คุณใช้เทคโนโลยีอะไร คำนำหน้าเหล่านี้ดูเหมือนจะให้ยืมในเว็บฟอร์ม
StuperUser

ฉันใช้ ASP.NET (โดยมี C # หลัง)
fearoffours

@delnan - คุณช่วยอธิบายได้ไหม? ทำไมขนาดของฟังก์ชั่นจึงทำให้การตั้งชื่อง่ายขึ้นโดยไม่ซ้ำกัน?
fearoffours

@fearofours: ฟังก์ชั่นขนาดเล็กต้องการตัวแปรน้อยลงและเห็นได้ชัดว่าตัวแปรน้อยลงหมายถึงการปะทะกันของตัวแปรที่น้อยลง ซึ่งถือว่าแน่นอนว่าคุณวางตัวแปรทุกตัวไว้ในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้

คำตอบ:


8

ประเด็นสุดท้ายของคุณคือสิ่งที่สำคัญที่สุด - ไม่ว่าคุณจะทำอะไรเพื่อให้สอดคล้องกับโครงการและกับเพื่อนร่วมงาน มีสองวิธีหลักในการบรรลุความมั่นคงและหากเป็นไปได้คุณควรใช้ทั้งสองวิธี ขั้นแรกใช้เครื่องมือเพื่อตรวจสอบอนุสัญญาการตั้งชื่อ ณ เวลาที่สร้าง ใน. Net world StyleCop จะเป็นตัวอย่างที่ดีของเครื่องมือดังกล่าว วิธีที่สองที่จะได้รับความสอดคล้องคือการตรวจสอบโดยเพื่อนของรหัสทั้งหมดเพื่อให้คุณสามารถระวัง

อีกสองประเด็นของคุณดูเหมือนจะถามเกี่ยวกับทางเลือกอื่น ฉันไม่แน่ใจว่าคุณต้องการทางเลือก ประเด็นเกี่ยวกับฮังการีที่ไม่เป็นที่นิยมอีกต่อไปก็คือมันเคยถูกใช้เพื่อลดความน่าสนใจของประเภทเมื่อระบบประเภทและเครื่องมือเป็นบิตเราจะพูดว่าเข้มงวดน้อยลง คือถ้าคุณกำลังเขียนโปรแกรมใน C และผ่านตัวชี้ไปรอบ ๆ วิธีเดียวในการติดตามประเภทคือการใช้ภาษาฮังการี ตอนนี้ถ้าคุณใช้ภาษาอย่าง C # หรือ Java คุณจะไม่ใช้พอยน์เตอร์ (หรือไม่ค่อยมี) ดังนั้นความต้องการใช้ภาษาฮังการีจะหายไป นอกจากนี้ IDEs ที่ทันสมัยช่วยให้คุณเห็นประเภทได้ง่ายมากโดยการวางตัวเหนือตัวแปรหรือที่แย่ที่สุดโดยใช้ทางลัดบางส่วนเพื่อดูการประกาศดั้งเดิม ดังนั้นฉันไม่คิดว่าคุณต้องการรูปแบบใด ๆ เพียงแค่ตั้งชื่อตัวแปรตามที่มันทำ หากเป็นที่อยู่อีเมลให้ใช้ "อีเมล" หรือ "


2
มันจะยากขึ้นเล็กน้อยเมื่อรูปแบบ / หน้า / หน้าต่าง / อะไรก็ตามที่มีปุ่มสำหรับอีเมลกล่องข้อความสำหรับอีเมลและอาจเป็นเครื่องมือ / การควบคุมสำหรับอีเมลอื่น ...
FrustratedWithFormsDesigner

7
@FrustratedWithFormsDesigner ไม่จำเป็นต้องเป็น กล่องข้อความอาจเป็น emailAddressInput โดยที่ปุ่มเป็น emailAddressSubmit และการแทนค่าภายในนั้นเป็นเพียงแค่ emailAddress
Jonathan

@ โจนาธาน: จุดดี
FrustratedWithFormsDesigner

3

เมื่อต้องรับมือกับเว็บฟอร์ม / Windows Forms / สิ่งกราฟิกอื่น ๆ คุณควรใช้ Systems Hungarian เนื่องจากคุณสามารถมีส่วนควบคุมที่เชื่อมโยงกันอย่างแน่นหนาตัวอย่างเช่นกล่องข้อความและป้ายกำกับที่เชื่อมต่อกัน คุณอาจตั้งชื่อพวกเขาtxtEmailและlblEmailเพื่อแยกพวกเขา จากประสบการณ์ของฉันสิ่งนี้เป็นเรื่องปกติและมีประโยชน์จริง ๆ

แต่ในโค้ดของคุณการตั้งชื่อแบบนี้ไม่จำเป็น ถ้าคุณมีตัวแปรของชนิดที่จะถูกนำมาใช้ในการจัดเก็บอีเมลเพียงแค่ชื่อมันstring emailถ้าด้วยเหตุผลบางอย่างคุณจะสับสน IDEs ส่วนใหญ่ควรอนุญาตให้คุณวางตัวไว้เหนือและดูประเภทของมัน (โดยหลักแล้วในสิ่งที่ OO อาจเป็นคุณลักษณะของวัตถุบางอย่างและuser.Emailชัดเจนยิ่งขึ้น)

ฉันคิดว่าหากคุณมีวัตถุมากกว่าหนึ่งรายการที่ถูกประกาศในรหัสของคุณซึ่งไม่ใช่ตัวควบคุม GUI ที่อาจตั้งชื่ออย่างถูกต้องemailสิ่งที่ผิดพลาดโดยธรรมชาติกับการออกแบบของคุณ


1
Actualy txt และ lbl ไม่ใช่ภาษาฮังการี txt สั้นเพียงแค่ Text และ lbl ย่อมาจาก Label ไม่มีเหตุผลที่จะไม่ใช้คำเต็มความยาวเช่น EmailText และ EmailLabel ในแบบฟอร์ม ชาวฮังการีจะเป็นประเภทซึ่งในทั้งสองกรณีนี้เป็นสตริง
Steve

1
@ Steve Haigh - ไม่ฉันกำลังพูดถึงการควบคุมด้วยตนเอง คุณมีวัตถุประเภท "textbox" ชื่อ txtEmail และวัตถุประเภท "label" ชื่อ lblEmail ทั้งคู่ไม่มีสตริง พวกเขาอาจมีคุณสมบัติสตริง แต่พวกเขาจะไม่สตริงตัวเอง
Andrew Arnold

1
ขอโทษด้วย ใช่แน่นอน ถึงกระนั้นก็ตามก็ไม่มีเหตุผลที่จะไม่ใช้ชื่อที่มีความหมายเช่น EmailTextBox เพียงเพราะ VS สร้างชื่อที่ไม่ดีไม่ได้หมายความว่าคุณต้องเก็บมันไว้ อย่างไรก็ตามในบริบทของรูปแบบตัวย่อของ txt และ lbl นั้นเป็นที่เข้าใจกันดีว่าฉันคงไม่ต้องกังวลในกรณีนี้
Steve

3

อะไรทำให้ตัวแปร "ยาว"

แทนที่จะtxtEmail, btnEmailคุณสามารถใช้UserEmailText, UserEmailButtonและAdminEmailText,AdminEmailButton

ปัญหานี้คือคุณอาจเริ่มรู้สึกว่าตัวแปรเริ่มนานขึ้น:

AdminEmailIsValid เริ่มเส้นเขตแดนกับระยะเวลาที่ฉันอนุญาตให้ใช้ตัวแปร

นอกจากนี้คุณอาจเริ่มสังเกตเห็นว่าคุณกำลังนำชุดตัวแปรมาใช้ใหม่และชุดของการดำเนินการกับตัวแปรเหล่านั้น นี่คือสิ่งที่ OOP ออกแบบมาสำหรับ แทนที่จะเป็นชุดของตัวแปรให้สร้างวัตถุทั่วไป:

class EmailForm
  var textBox, button, text
  function storeEmail()

จากนั้นคุณสามารถสร้างอินสแตนซ์ตัวแปรใหม่เป็นคลาสและใช้เครื่องหมายจุดเดียวกันเพื่อเข้าถึงข้อมูลของคุณ:

userEmailForm = new EmailForm(...data...)
adminEmailForm = new EmailForm(...different data...)
doSomething( userEmailForm.text )
doSomethingElse( adminEmailForm.text )

แน่นอนว่าสิ่งนี้มีการกำหนดเป้าหมายไปยังภาษาที่ใช้กระบวนทัศน์ OOP แต่ภาษาการพัฒนาเว็บที่เป็นที่นิยมส่วนใหญ่เป็นแบบออบเจ็กต์หรืออนุญาตสำหรับโค้ดเชิงวัตถุ (PHP, Python, C #, C ++, Java, JavaScript, ActionScript ฯลฯ ) )


ฉันไม่เห็นประโยชน์ของ UserEmailText to txtEmail - คุณเพียงพิมพ์ประเภทแทนที่จะเติมหน้ามัน ฉันชอบ "นี่คือสิ่งที่ OOP ออกแบบมาสำหรับ" แม้ว่า
fearoffours

@fearoffours, OP ยอมรับว่ามีปัญหากับชื่อที่ไม่ซ้ำกันฉันได้เพิ่มตัวอย่างนั้นเป็นวิธีการอธิบายในการแยกความแตกต่างระหว่างตัวแปรที่คล้ายกันสองตัว ( UserEmailTextและAdminEmailTextโดยเฉพาะ) ฉันมักจะต่อท้ายประเภทตามที่ยืมตัวเองเพื่อย้ายไปเรียนUserEmailText-> UserEmail.text-> User.email.textขึ้นอยู่กับความจำเป็น abstraction / ฟังก์ชั่น
zzzzBov

ตกลงดูว่าคุณมาจากที่ใด +1 สำหรับการเปรียบเทียบคำต่อท้าย / คลาส โอ้และฉันเป็นผู้บริหาร!
fearoffours

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