ทำความรู้จัก Hungarian Notation
กระทู้เก่าบอร์ด อ.Yeadram

 2,060   1
URL.หัวข้อ / URL
ทำความรู้จัก Hungarian Notation

Hungarian Notation เป็นวิธีการใส่ Prefix ให้กับคอนโทรลต่างๆ ใน Access โดยมีจุดเริ่มต้นมาจาก Charles Simonyi ในสมัยที่ยังทำงานอยู่ที่ Xerox โดยสมัยนั้นยังไม่ได้ชื่อ Hungarian Notation หรอกครับ แต่เป็นอันรู้กันว่า ถ้ามีการใส่ Prefix ที่เป็นมาตรฐานให้กับออบเจ็กต์จะทำให้การเขียนโปรแกรมง่ายขึ้นมาก

(มีเรื่องอยากบอกว่า OOP น่ะจุดเริ่มต้นอยู่ที่ Xerox นะจ๊ะ แต่ตอนหลังไม่รู้ไปไงมาไง ดันไปเจริญเติบโตที่ Apple ซะงั้น จากนั้นก็ Microsoft)

วันหนึ่งพี่เค้าย้ายมาทำงานที่ Microsoft ก็เลยเอาวิธีการเขียน Code แบบนี้มาใช้ที่ Microsoft ด้วย เริ่มแรกผมก็จำได้ไม่แน่ชัดว่าเค้าเอามาใช้ในภาษา C++ หรือไงนี่แหละ แล้วก็ค่อยๆ เป็นที่นิยมกันในหมู่โปรแกรมเมอร์ในเวลาอันรวดเร็ว จนมาถึง Access ซึ่งมีวิธีการกำหนดดังนี้

ชื่อตาราง จะนำหน้าด้วย tbl เช่น tblTable
ชื่อคิวรี จะนำด้วย qry เช่น qryQuery

โดยตัว Prefix จะใช้ตัวเล็กทั้งหมด ดังรายละเอียดในลิงก์ต่อไปนี้

http://support.microsoft.com/kb/173738

สุดท้ายรายการที่อยากบอก
1. สาเหตุที่ชื่อ Hungarian Notation เพราะ Charles Simonyi เป็นชาวฮังการี
2. เวลาสร้างออบเจ็กต์ต่างๆ ใน Access พยายามใช้ Prefix แบบ Hungarian Notation เถอะ เวลาแก้ไข ไม่ว่าจะแก้ไขเอง หรือส่งให้คนอื่นช่วย ชีวิตจะง่ายขึ้นเยอะ
3. เวลาตั้งชื่อออบเจ็กต์ก็ควรเป็นภาษาอังกฤษแบบไม่มีเว้นวรรค เพราะจะช่วยให้การทำงานกับออบเจ็กต์ต่างๆ ทำได้ง่ายขึ้นมาก เช่น ตารางเก็บชื่อลูกค้าก็ตั้งชื่อเป็น tblCustomerName เป็นต้น อย่าตั้งเป็น tblชื่อลูกค้า เลยครับ ทรมานตัวเองเปล่าๆ

1 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R19157
ผมขอแลกเปลี่ยนประสบการณ์นะครับ ผมเองก็ใช้ แต่ไม่ได้ทำตาม standard   สาเหตุเพราะ

1) 3 อักษรขึ้นไป สำหรับผมถือว่ายาวไป เพราะแต่ละฟอร์มใช้โค้ดเป็นพันบรรทัด ก็มี   1 ตัวอักษรที่เพิ่มก็แปลว่าเพิ่มงานมาเป็นพันๆ keystroke เหมือนกัน มีเฉพาะ command button ที่ผมใช้คำว่า btn ซึ่งมี 3 ตัวอักษรนำหน้าคอลโทรล (จำไม่ได้เหมือนกันว่าทำไม ต่อไปคงใช้ bt เฉยๆก็พอแล้ว)

2) การกำหนด prefix สำหรับออปเจ็คหรือคอลโทรลแต่ละประเภท ผมว่าละเอียดเกินไปและผูกติดกับประเภทมากไป เมื่อมีการแก้ไขประเภททีนึง ต้องนั่งไล่ตามแก้กันหมดทั้งโปรเจค

3) มันลานตาเกินไป ทำให้เวลาอ่านโค้ดเยอะๆแล้วรบกวนสายตามาก แทนที่เราจะเจอความหมายของสิ่งที่เราต้องการอ่านตรงๆว่ามันคือคอนโทรลหรือออปเจ็คไหนไปเลย    prefix ที่เยอะเกินไป ทำให้สายตาเราจะต้องสแกนเยอะกว่าที่ควร และส่วนใหญ่แล้ว เราจะไม่สนใจ prefix พวกนี้ด้วยซ้ำไป โดยส่วนตัวผม โค้ดควรจะสั้นแต่ได้ใจความ ไม่เป็นสัญญลักษณ์เกินไปอย่างพวกภาษา C (แต่ด้วยจุดประสงค์ของภาษา C เอง ผมก็เข้าใจว่ามันก็ต้องเป็นอย่างนั้น) แต่ก็ไม่ต้องถึงกับตั้งชื่อตัวแปรยาวๆเช่น intNumberOfFinishedGoods ใช้แค่ wNumFG ก็พอแล้ว (w นี้ผมติดมาจากสมัยเขียนภาษาโคบอลที่เราต้องสร้างตัวแปรใน Working Storage Section หน่ะครับ)

แล้วที่ผมใช้มีอะไรบ้าง ก็มี

- prefix ที่บอกว่ามันเป็นอยู่บนฟอร์ม หรือรายงาน แล้วเป็น bound control หรือ unbound control เท่านั้นเอง เช่น fbItemCD, fuSumQty, rbItemCD, ruPageNo

-prefix ที่บอกว่ามันเป็น command button หรือเป็น label เพราะ 2 ตัวนี้ไม่มีประเภท bound control อยู่แล้ว เช่น btnPrint หรือ lbItemCD

- prefix ที่บอกว่ามันเป็น calculated field จากคิวรี่ เช่น qfMaxID

- prefix ที่บอกว่ามันเป็นเทเบิล ตรงนี้ผมใช้ตัวอักษร 4 ตัวอักษร (จริงๆไม่อยากให้ยาวอย่างนี้ แต่เลี่ยงให้สั้นกว่านี้ไม่ได้เลย บางครั้งต้องยาวถึง 5 ตัวอักษรด้วยซ้ำ) ตัวแรกบอกว่ามันเป็น Master table หรือ Transaction table หรือเป็น System table (หมายถึง system table ของระบบเราเอง ไม่ได้หมายถึง system table ของ Access) อีก 3 ตัวที่เหลือถึงจะเป็นชื่อย่อของเทเบิลอีกที เช่น MITM ก็คือ Item master table, TSOH ก็คือ Sales Order's Header Transaction table

- prefix ที่บอกว่าเป็น select query, append query, delete query, form, report, macro, module

- prefix ที่บอกว่าที่บอกว่าตัวแปรอยู่ใน procedure level, argument variable, module level, public level และค่าคงที่ เช่น wNumFG, aNumFG, mNumFG, pNumFG, cMaxLine

- prefix ที่บอกว่าเป็น Private/Public ของ Procedure/Function เช่น mfGetUserNM, msLockCtrl, pfIsFileExist, psStartSystem

จะเห็นว่า prefix ที่ผมใช้จะไม่เยอะเท่ากับของ Standard   แต่ยังไงก็ตาม ใครจะใช้ยังไงก็พิจารณาดูว่าอะไรที่เราให้ความสำคัญมันเป็นหลัก อย่างผม ประเภทคอนโทรลไม่ค่อยสำคัญ แต่สำคัญว่ามันผูกกับฟิลด์ในเทเบิล/คิวรี่หรือไม่ เพราะเราเขียนแอพที่เกี่ยวกับข้อมูลเป็นหลัก เราทำอะไรกับคอนโทรลนั้น มันจะมีผลอะไรกับฟิลด์หรือไม่ นี่เป็นสิ่งที่ผมต้องระวังเสียมากกว่าครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3147s