Clean Code: หลักการตั้งชื่อที่ดี
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการ Refactoring และเทคนิคเบื้องต้นในการปรับปรุงโค้ดให้ดีขึ้น ในบทนี้ เราจะมาเจาะลึกเรื่องหนึ่งที่สำคัญมากๆ ในการเขียน Clean Code นั่นก็คือ การตั้งชื่อ ที่ดีนั่นเอง การตั้งชื่อที่ดีไม่ได้หมายถึงแค่การตั้งชื่อให้แตกต่างจากคนอื่น แต่หมายถึงการตั้งชื่อที่สื่อความหมาย, อ่านง่าย และทำให้โค้ดของเราเข้าใจได้ง่ายขึ้นสำหรับทุกคนที่เข้ามาอ่าน รวมถึงตัวเราเองในอนาคตด้วย!
ทำไมการตั้งชื่อถึงสำคัญ?
ลองจินตนาการว่าคุณกำลังอ่านหนังสือที่มีแต่ตัวอักษรที่ไม่คุ้นเคย หรือมีแต่คำย่อที่คุณไม่เข้าใจ คุณจะรู้สึกอย่างไร? โค้ดก็เหมือนกัน ถ้าเราตั้งชื่อตัวแปร, ฟังก์ชัน หรือคลาส แบบสั้นๆ, ไม่สื่อความหมาย หรือใช้คำย่อที่เราเข้าใจคนเดียว โค้ดของเราก็จะกลายเป็นเหมือนหนังสือที่อ่านยาก ทำให้คนอื่น (รวมถึงตัวเราเอง) เสียเวลาในการทำความเข้าใจมากขึ้น
การตั้งชื่อที่ดีจะช่วยให้:
- โค้ดอ่านง่ายขึ้น: เมื่อชื่อสื่อความหมาย เราจะเข้าใจได้ทันทีว่าตัวแปรนั้นเก็บอะไร, ฟังก์ชันนั้นทำอะไร
- ลดความซับซ้อน: ชื่อที่ดีจะช่วยให้เราไม่ต้องเสียเวลาตีความว่าโค้ดส่วนนั้นทำงานอย่างไร
- ลดโอกาสเกิด Bug: เมื่อเข้าใจโค้ดได้ง่ายขึ้น เราก็จะสามารถตรวจจับ Bug ได้ง่ายขึ้น
- เพิ่มความสามารถในการบำรุงรักษา: เมื่อโค้ดอ่านง่ายและเข้าใจง่าย การแก้ไขหรือปรับปรุงโค้ดก็จะทำได้ง่ายขึ้น
หลักการตั้งชื่อที่ดี
ต่อไปนี้เป็นหลักการพื้นฐานในการตั้งชื่อที่ดีที่เราควรนำไปใช้:
1. ชื่อที่สื่อความหมาย
หลักการที่สำคัญที่สุดคือการตั้งชื่อที่สื่อความหมายให้มากที่สุด ชื่อควรบอกให้เราทราบว่าตัวแปรนั้นเก็บอะไร, ฟังก์ชันนั้นทำอะไร, หรือคลาสนั้นมีหน้าที่อะไร
ตัวอย่างที่ไม่ดี:
$d; // วันที่
$u; // ชื่อผู้ใช้
function processData($data) { ... } // ประมวลผลข้อมูล
จากตัวอย่างข้างต้น เราไม่สามารถบอกได้เลยว่า $d คือวันที่อะไร, $u คือชื่อผู้ใช้แบบไหน, หรือ processData() ประมวลผลข้อมูลอะไรบ้าง
ตัวอย่างที่ดี:
$orderDate; // วันที่สั่งซื้อ
$username; // ชื่อผู้ใช้
function processOrderData($orderData) { ... } // ประมวลผลข้อมูลการสั่งซื้อ
จากตัวอย่างนี้ เราสามารถเข้าใจได้ทันทีว่า $orderDate คือวันที่สั่งซื้อ, $username คือชื่อผู้ใช้, และ processOrderData() ประมวลผลข้อมูลการสั่งซื้อ
2. หลีกเลี่ยงชื่อย่อ
การใช้ชื่อย่ออาจจะช่วยให้เราพิมพ์โค้ดได้เร็วขึ้น แต่ในระยะยาวจะทำให้โค้ดอ่านยากขึ้น โดยเฉพาะอย่างยิ่งถ้าชื่อย่อนั้นไม่ได้เป็นที่รู้จักกันโดยทั่วไป
ตัวอย่างที่ไม่ดี:
$usr; // ผู้ใช้
$addr; // ที่อยู่
$cnt; // จำนวน
ตัวอย่างที่ดี:
$user; // ผู้ใช้
$address; // ที่อยู่
$count; // จำนวน
ถ้าจำเป็นต้องใช้ชื่อย่อจริงๆ ให้ใช้เฉพาะชื่อย่อที่เป็นที่รู้จักกันดีในวงกว้างเท่านั้น เช่น id (identifier), url (Uniform Resource Locator), html (HyperText Markup Language)
3. ใช้ชื่อที่สอดคล้องกับ Domain
ถ้าโปรเจกต์ของเราเกี่ยวข้องกับ Domain เฉพาะ (เช่น การเงิน, การแพทย์, การขนส่ง) เราควรใช้ชื่อที่สอดคล้องกับ Domain นั้นๆ เพื่อให้โค้ดของเราสื่อความหมายมากยิ่งขึ้นสำหรับคนที่ทำงานใน Domain นั้น
ตัวอย่าง:
สมมติว่าเรากำลังพัฒนาโปรแกรมสำหรับจัดการข้อมูลลูกค้าในธุรกิจค้าปลีก เราอาจจะใช้ชื่อเช่น customerId, productName, orderTotal แทนที่จะใช้ชื่อทั่วไป เช่น id, name, total
การใช้ชื่อที่สอดคล้องกับ Domain จะช่วยให้คนที่ทำงานใน Domain นั้นๆ เข้าใจโค้ดของเราได้ง่ายขึ้น และลดโอกาสในการตีความผิดพลาด
4. รูปแบบการตั้งชื่อ (Naming Conventions)
ถึงแม้ว่า PHP จะไม่ได้บังคับรูปแบบการตั้งชื่อที่ตายตัว แต่การใช้รูปแบบการตั้งชื่อที่สอดคล้องกันทั้งโปรเจกต์จะช่วยให้โค้ดของเราดูเป็นระเบียบและอ่านง่ายขึ้น
รูปแบบการตั้งชื่อที่นิยมใช้ใน PHP:
- ตัวแปร: ใช้ camelCase (เช่น
$firstName,$lastName) - ฟังก์ชัน: ใช้ camelCase (เช่น
getUserName(),calculateTotal()) - คลาส: ใช้ PascalCase (เช่น
User,Product) - ค่าคงที่: ใช้ UPPER_SNAKE_CASE (เช่น
MAX_VALUE,DEFAULT_TIMEOUT)
ตัวอย่าง:
class User {
private $firstName;
private $lastName;
public function getFullName() {
return $this->firstName . ' ' . $this->lastName;
}
}
const MAX_USERS = 100;
5. ความยาวของชื่อ
ชื่อควรมีความยาวที่เหมาะสม ไม่สั้นจนเกินไปจนไม่สื่อความหมาย และไม่ยาวจนเกินไปจนอ่านยาก โดยทั่วไปแล้ว ชื่อควรมีความยาวประมาณ 1-3 คำ
ตัวอย่างที่ไม่ดี:
$veryLongVariableNameThatIsHardToRead; // ยาวเกินไป
$x; // สั้นเกินไป
ตัวอย่างที่ดี:
$customerName;
$orderTotal;
ตัวอย่างเพิ่มเติม
ลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจหลักการตั้งชื่อให้มากขึ้น:
ตัวอย่างที่ไม่ดี:
function calc($a, $b) {
return $a + $b;
}
$res = calc(5, 10);
ตัวอย่างที่ดี:
function calculateSum($number1, $number2) {
return $number1 + $number2;
}
$sum = calculateSum(5, 10);
จากตัวอย่างนี้ เราจะเห็นได้ว่าการตั้งชื่อที่ดีช่วยให้โค้ดอ่านง่ายและเข้าใจง่ายขึ้นอย่างมาก
สรุป
การตั้งชื่อที่ดีเป็นสิ่งสำคัญอย่างยิ่งในการเขียน Clean Code การตั้งชื่อที่สื่อความหมาย, หลีกเลี่ยงชื่อย่อ, ใช้ชื่อที่สอดคล้องกับ Domain, ใช้รูปแบบการตั้งชื่อที่สอดคล้องกัน และมีความยาวที่เหมาะสม จะช่วยให้โค้ดของเราอ่านง่าย, ลดความซับซ้อน, ลดโอกาสเกิด Bug และเพิ่มความสามารถในการบำรุงรักษา
ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับหลักการ Clean Code ในส่วนของฟังก์ชัน ว่าฟังก์ชันที่ดีควรมีลักษณะอย่างไร และเราจะเขียนฟังก์ชันให้สะอาดและอ่านง่ายได้อย่างไร