Coding standard การตั้งชื่อ
![Coding standard การตั้งชื่อ](/_next/image?url=https%3A%2F%2Fsennalabs.s3.ap-southeast-1.amazonaws.com%2Fblogs%2Fcover_1684932951498.png&w=3840&q=75)
ในทางของการเขียนโปรแกรมคอมพิวเตอร์ “naming convention” คือชุดของกฎที่ถูกเลือกใช้ในการระบุซึ่ง การแสดงถึงตัวแปร ชนิดของฟังก์ชั่น และสิ่งอื่นๆ ภายในซอร์สโค้ดและเอกสารประกอบ เหตุผลในการใช้ naming convention มีดังต่อไปนี้
-
เพื่อลดความพยายามในการอ่านและทำความเข้าใจซอร์สโค้ด
-
เพื่อให้การตรวจทานโค้ดมุ่งเน้นไปที่ปัญหาที่สำคัญกว่ามาตรฐานไวยากรณ์และการตั้งชื่อ
-
เพื่อให้เครื่องมือตรวจสอบคุณภาพโค้ดสามารถมุ่งเน้นที่การรายงานในประเด็นสำคัญอื่นๆ นอกเหนือจากการตั้งค่าไวยากรณ์และสไตล์เป็นหลัก
-
ใช้คำให้เหมือนกัน (Consistency)
การเขียนโปรแกรมนั้นเราสามารถตั้งชื่อของตัวแปรและฟังก์ชั่นได้ตามที่เราต้องการ ซึ่งโดยปกติแล้วเราจะตั้งชื่อตามหน้าที่หรือวัตถุประสงค์ของการทำงาน การเลือกใช้คำในการตั้งชื่อควรใช้คำเดียวกัน เพื่อลดความขัดแย้งในการตั้งชื่อ เนื่องจากมีคำมากมายที่ให้ความหมายเหมือนกัน
จากตัวอย่างทั้ง 3 มีจุดประสงค์ในการทำงานเดียวกันคือ “ดึงข้อมูลของผู้ใช้งาน” แต่ทั้ง 3 ใช้คำที่แตกต่างกัน ผลที่ตามมาของการใช้ที่หลากหลายในโปรเจค จะทำให้เกิดความคิดที่ขัดแย้งกัน ว่าเราควรจะเลือกคำใดในการตั้งชื่อตัวแปรหรือฟังก์ชั่้น ในอนาคตที่มีจุดประสงค์ในการทำงานแบบเดียวกัน เช่น “ดึงข้อมูลของสินค้า” จะเกิดความคิดที่ว่า ควรใช้ get, fetch หรือ retrive อันไหนดี ฉะนั้นการเลือกใช้คำให้เหมือนกันจะช่วยลดเวลาการตัดสินใจในสิ่งที่ไม่จำเป็นนั้นเอง
ใช้คำที่มีความหมายและอ่านออกเสียงได้อย่างชัดเจน (Use Pronounceable Names)
ในการตั้งชื่อตัวแปร หรือ ฟังก์ชั่นให้สามารถอ่านออกเสียงชัด มีประโยชน์กับทั้งตัวผู้เขียนเอง และผู้ที่จะมาพัฒนาต่อ เพราะการตั้งชื่อมีผลต่อการตีความถึงวัตถุประสงค์ของการทำงานของตัวแปรหรือฟังชั่นนั้นๆ หากชื่อที่ตั้งมีความไม่ชัดเจน อาจจะเกิดการตีความวัตถุประสงค์ที่ผิดเพี้ยนไป เช่น
จากตัวอย่างคือ ตัวแปร fName ใช้เก็บข้อมูล “ชื่อ-นามสกุล” หรือ “ชื่อจริง” ก็ได้ เพราะ fName สามารถเป็นได้ทั้ง FirstName และ FullName แล้วแต่การตีความของตัวบุคคล เช่นเดียวกันกับ ตัวแปร tBook อาจจะถูกตีความว่า ใช้เก็บข้อมูล “จำนวนหนังสือ” หรือ “ชื่อของหนังสือ” เพราะ tBook อาจหมายถึง titleBook หรือ totalBook ก็ได้ ฉะนั้นการตั้งชื่อที่มีความหมายและอ่านออกเสียงได้อย่างชัดเจน จะช่วยลดปัญหาการนำตัวแปรไปใช้ผิดวัตถุประสงค์ของการทำงาน
ความแตกต่างที่มีความหมาย (Meaningful Distinctions)
บางครั้งคำๆ เดียวกันแต่จุดประสงค์ของการทำงานนั้นต่างกัน มีหลายครั้งที่คำๆ เดียวกันในบริบท (Context) ที่ต่างกัน ให้ผลลัพธ์ของการทำงานที่ไม่เหมือนกัน
ทั้งสอง class มีฟังก์ชั่นชื่อว่า add เหมือนกัน ทั้ง 2 ฟังก์ชั่นมีชื่อถูกต้องตรงตามวัตถุประสงค์ของ class ทั้งคู่ ใน class calculator ฟังก์ชั่น add(x,y) เป็นการบวกเลข 2 จำนวน ส่วนใน class cart ฟังชั่น add(x) เป็นการเพิ่มสินค้าลงในตระกร้า หากเราทำการ search ใน project ด้วย wording “add” เราจะพบ function ทั้งสอง จะดีกว่าไหม ถ้าเราเปลี่ยนเป็นแบบนี้
add(x,y) -> addNumbers(x, y)
add(x) -> insertElement(x)
เมื่อเป็นแบบนี้เราก็จะสามารถ search หาฟังก์ชั่นที่ตรงตามความต้องการได้ง่ายยิ่งขึ้น ช่วยประหยัดเวลาในการค้นหา
ใช้คำที่มีความหมายในเชิงบวก (Be Positive)
ทิศทางความหมายของคำ ส่งผลต่อเวลาที่ใช้ในการตีความหมายและความเข้าใจต่อคำนั้นๆ โดยปกติแล้วของมนุษย์เราจะเข้าใจคำที่มีความหมายในเชิงบวกง่ายกว่าเชิงลบ และพื้นฐานการทำงานของ computer จะทำงานตามความ”จริง” (Boolean) เงื่อนไขนั้นจะต้องเป็น “จริง” เสมอ โปรแกรมจึงจะทำงานต่อไป
จากตัวอย่างทั้ง 3 คำ เป็นคำที่เมื่อเราอ่านแล้วจะต้องตีความย้อนกลับ เพื่อให้เรานั้นเข้าใจถึงตรรกะการทำงานของซอร์สโค้ดชุดนี้
-
If (notEnabled) {} หมายความว่า ถ้า”ไม่ได้เปิดใช้งาน” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
-
If (notClosed) {} หมายความว่า ถ้า”ไม่ปิด” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
-
If (notBanned) {} หมายความว่า ถ้า”ไม่ห้าม” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
ถ้าเราเปลี่ยนเงื่อนไขให้เป็นความหมายในเชิงบวกดังนี้
-
If (isDisabled) {} หมายความว่า ถ้า”ถูกปิดใช้งาน” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
-
If (isOpen) {} หมายความว่า ถ้า”เปิด” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
-
If (isAllowed) {} หมายความว่า ถ้า”ได้รับอนุญาต” จึงจะทำงานตามซอร์สโค้ดภายใต้ {} (Curly brackets)
จะเห็นได้ว่าซอร์สโค้ดที่มีเงื่อนไขในเชิงบวก ใช้เวลาในการอ่านและทำความเข้าใจน้อยกว่า อีกทั้งยังไม่สร้างความสับสนในเงื่อนไขอีกด้วย
การตั้งชื่อนั้นไม่ง่ายเลย บางครั้งอาจจะต้องใช้ประสบการณ์ในการพบเจอกับซอร์สโค้ดในรูปแบบต่างๆ รวมถึงการทำงานร่วมกับผู้อื่น แต่สิ่งหนึ่งที่ผู้เขียนโปรแกรมควรคิดอยู่เสมอว่าซอร์สโค้ดที่ทำนั้นควรอยู่ในรูปแบบที่อ่านแล้วทำความเข้าใจได้ง่าย แสดงถึงจุดประสงค์ที่ชัดเจนในการทำงานของมัน เพื่อในอนาคตที่เราต้องกลับมาพัฒนาหรือมีผู้อื่นมาพัฒนาต่อ ไม่ต้องมาเสียเวลาในการทำความเข้าใจมากมายกว่าที่ควรจะเป็น
แหล่งอ้างอิง
![Senna Labs](/_next/image?url=%2Fsenalabs.jpg&w=3840&q=75)
![](/_next/image?url=%2Fimages%2Fsubscribe.webp&w=3840&q=75)
Subscribe to follow product news, latest in technology, solutions, and updates
Other articles for you
Let’s build digital products that are simply awesome !
We will get back to you within 24 hours!Go to contact us![](/_next/image?url=%2Fimages%2Ftell-us-arrow.webp&w=384&q=75)
![Contact ball](/_next/image?url=%2Fimages%2Fcontact-ball.webp&w=3840&q=75)
![Contact us bg 2](/_next/image?url=%2Fimages%2Fcontact-us-bg-2.webp&w=3840&q=75)
![Contact us bg 4](/_next/image?url=%2Fimages%2Fcontact-us-bg-4.webp&w=3840&q=75)
![Contact us bg 1](/_next/image?url=%2Fimages%2Fcontact-us-bg-1.webp&w=3840&q=75)
![Ball left](/_next/image?url=%2Fimages%2Fball-left.png&w=1080&q=75)
![Ball right](/_next/image?url=%2Fimages%2Fball-right.png&w=1920&q=75)
![Ball left](/_next/image?url=%2Fimages%2Fball-left.png&w=256&q=75)
![Ball right](/_next/image?url=%2Fimages%2Fball-right.png&w=384&q=75)
![Sennalabs gray logo](/_next/image?url=%2Fimages%2Fsennalabs-gray-logo.webp&w=256&q=75)