วันอาทิตย์, สิงหาคม 24, 2551

หมดสมัยของการย่อชื่อตัวแปร

เมื่อกี้พยายามแกะ xml ของ Lexitron เพื่อนำมาสร้าง HTML ให้กับโปรแกรม Dictinary.app แล้วพบตัวย่อหลายตัว อ่านแล้วงงๆ เช่น

<xml>
  <doc>
    <esearch>able-bodied   
    <eentry>able-bodied</eentry>   
    <tentry>แข็งแรง</tentry>   
    <ecat>ADJ</ecat>   
    <esyn>healthy; fit</esyn>   
    <id>76</id>
</doc>
</xml>

พยายามแกะ แล้วได้ความว่า

ตัวย่อตัวเต็มคำแปร
esearchenglish searchตัวอักษรที่ใช้อ้างอิงตอนค้นหา
eentryenglish entryคำนี้ในภาษาอังกฤษ
tentrythai entryคำนี้ในภาษาไทย
ecatenglish categoryประเภทของคำ
esynenglish synchronizeคำเหมือนในภาษาอังกฤษ
ethaienglish thaiคำเหมือนในภาษาไทย

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

ถ้ากลัวอ่านไม่เขาใจ ให้ใส่ comment ที่หัวของ xml แทน หรือทางที่ดีกว่านี้คือใส่ตัวเต็มแล้ว compress file เอา อาจจะใช้ gzip ซึ่งทำให้ไฟล์มีขนาดเล็กลง และถ้า gzip มันฉลาดพอ มันน่าจะรวบคำพวกนี้ให้เหลือแค่ไม่กี่ bit ให้เราด้วยเลย จากนั้นก็ยกเป็นหน้าที่ของโปรแกรมอ่าน xml ที่จะต้องแตก zip ออกมาก่อนหรือแปลงไฟล์ไฟล์เป็นรูปแบบที่ต้องการก่อนนำไปใช้จริง

อีกตัวอย่างหนึ่งในเรื่องการตั้งชื่อ field ใน table เป็นตัวย่อ เช่น appdate, cname, no เป็นต้น ผมเข้าใจว่าการย่อชื่อ field มีประโยชน์ตอนที่เราเขียน SQL จะได้เขียนสั้นๆ ยิ่งต้องเขียน SQL ยาวๆ และ มากมายใน code การย่อตัวแปลยิ่งดูมีเหตุมีผลมากขึ้น

แต่ในปัจจุบันเรามี ORM เข้ามาแทนที่การเขียน SQL ดังนั้นการย่อชื่อใน table นอกจากจะไม่จำเป็นแล้ว ยั่งทำให้สับสนอีกด้วย ขอยกตัวอย่างของ Active Record การ query ข้อมูลจาก database เช่น การค้นหา quotation ที่สร้างโดยนาย A แบบที่สร้างชื่อ field แบบย่อ

quotations = Quotation.find_all_by_cname(A)

หรือ

quotations = Quotation.find_all_by_creatname(A) 

เทียบกับ การใช้ชื่อ field แบบเต็ม

quotations = Quotation.find_all_by_creater_name(A) 

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

เวลาที่เราเขียน application เราจะให้ application ของเราตั้งชื่อตัวแปลตามชื่อ field จากฐานข้อมูล ลดความซ้ำซ้อนของโปรแกรมไปได้มากทีเดียว การย่อชื่อยังพบได้อีกหลายจุดในโปรแกรมของเรา หลายครั้งมันดูดีเพราะต้องนำไปใช้หลายที่ แต่ถ้าเป็นไปได้ให้ใช้ตัวเต็มๆ เพื่ออ่านรู้เรื่องสำคัญกว่าครับ

การตัดสินใจว่าจะย่อหรือไม่น่าจะมาจากคำถามว่า เวลาคนอื่นมาอ่าน code ของเราจะเข้าใจหรือเปล่า ย่อตรงจุดนี้แล้วต้องไปเป็นการเพิ่ม code ที่อื่นหรือไม่ เช่นกรณีของ label เป็นต้น ถ้าคิดแล้วว่าไม่เข้าใจและเป็นการเพิ่ม code ก็อย่าย่อเลยครับ
blog comments powered by Disqus