เขียน Python ให้เป็นระบบ: จากโค้ดทดลองสู่โค้ดที่อ่านง่าย
ถ้าคุณเริ่มจากการเขียน Python แบบลองผิดลองถูก คุณอาจรู้สึกว่าโค้ดมัน “รันได้” ก็พอแล้ว แต่พอโปรเจกต์เริ่มใหญ่ขึ้น ความยุ่งจะเริ่มตามมาอย่างรวดเร็ว: ตัวแปรกระจัดกระจาย ฟังก์ชันยาวเกินไป และแก้จุดหนึ่งแล้วพังอีกจุดหนึ่ง
บทความนี้จะช่วยเปลี่ยนมุมมองจากการ “เขียนให้รันได้” ไปสู่การ “เขียนให้ดูแลต่อได้” ซึ่งเป็นทักษะที่สำคัญมากสำหรับงานจริง ไม่ว่าจะเป็นงานวิเคราะห์ข้อมูล ระบบอัตโนมัติ เว็บแอป หรือ AI
1) เริ่มจากการคิดให้ชัดก่อนเขียน
ก่อนแตะ keyboard ให้ตอบคำถาม 3 ข้อนี้ให้ได้:
- อินพุตคืออะไร
- เอาต์พุตต้องการอะไร
- ขั้นตอนกลางมีอะไรบ้าง
ตัวอย่างเช่น ถ้าโจทย์คือ “รับรายชื่อคะแนนแล้วหาค่าเฉลี่ย” เราควรแยกความคิดออกเป็น: รับข้อมูล, ตรวจข้อมูล, คำนวณ, และแสดงผล
scores = [85, 92, 78, 90]
average = sum(scores) / len(scores)
print(f"ค่าเฉลี่ยคือ {average:.2f}")
โค้ดแบบนี้สั้น แต่ถ้าต้องรับข้อมูลจากไฟล์หรือ API เราควรแยกเป็นฟังก์ชันย่อยเพื่อให้ทดสอบได้ง่าย
2) ใช้ฟังก์ชันเพื่อแบ่งความรับผิดชอบ
ฟังก์ชันที่ดีควรทำหน้าที่เดียวและชื่อควรสื่อความหมายชัดเจน เช่น load_data(), clean_text(), calculate_average()
def calculate_average(values: list[float]) -> float:
if not values:
raise ValueError("values must not be empty")
return sum(values) / len(values)
def format_report(student_name: str, scores: list[float]) -> str:
avg = calculate_average(scores)
return f"{student_name}: ค่าเฉลี่ย {avg:.2f}"
เมื่อฟังก์ชันเล็กลง เราจะอ่านง่ายขึ้น และหาจุดผิดพลาดได้เร็วขึ้นมาก
3) จัดโครงสร้างโปรเจกต์ตั้งแต่ต้น
สำหรับโปรเจกต์จริง ควรแยกไฟล์ตามหน้าที่ เช่น:
project/
app.py
src/
data.py
services.py
utils.py
tests/
test_services.py
ข้อดีคือคุณไม่ต้องยัดทุกอย่างไว้ในไฟล์เดียว และทีมงานคนอื่นจะเข้าใจโครงสร้างได้ทันที
4) ใช้ virtual environment ทุกครั้ง
Python มักทำให้มือใหม่พลาดเรื่อง dependency ได้ง่าย ถ้าไม่แยก environment โปรเจกต์หนึ่งอาจไปกระทบอีกโปรเจกต์หนึ่ง
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
การแยก environment ช่วยให้ติดตั้งแพ็กเกจได้เป็นระเบียบ และทำให้โปรเจกต์ reproduce ได้ง่ายขึ้น
5) เขียนโค้ดที่อ่านได้ก่อน แล้วค่อย optimize
หลายคนพยายามเขียนโค้ดให้เร็วที่สุดตั้งแต่แรก แต่สิ่งที่สำคัญกว่าคือความชัดเจน
แนวทางที่ควรจำ:
- ใช้ชื่อตัวแปรที่อธิบายตัวเองได้
- อย่าเขียน nested ซ้อนกันลึกเกินไป
- ถ้า logic เริ่มยาว ให้แตกเป็นฟังก์ชัน
- ใส่ type hint เมื่อเริ่มทำงานกับข้อมูลซับซ้อน
def normalize_name(name: str) -> str:
return name.strip().title()
6) ทดสอบด้วยข้อมูลเล็ก ๆ ก่อนเสมอ
ก่อนเอาโค้ดไปรันกับข้อมูลจริงจำนวนมาก ให้ลองกับชุดข้อมูลเล็ก ๆ เพื่อดูว่าผลลัพธ์ถูกต้องไหม
assert calculate_average([10, 20, 30]) == 20
ถ้าเริ่มจาก test เล็ก ๆ คุณจะจับบั๊กได้ก่อนที่มันจะกลายเป็นปัญหาใหญ่
สรุป
Python ที่ดีไม่ใช่แค่โค้ดที่รันผ่าน แต่ต้องเป็นโค้ดที่ทีมอื่นอ่านต่อได้ คุณกลับมาแก้ได้ในอีก 3 เดือน และขยายต่อได้เมื่อ requirement เปลี่ยน
ถ้าคุณฝึก 6 เรื่องนี้บ่อย ๆ คือ การคิดให้ชัด, แยกฟังก์ชัน, จัดโครงสร้างโปรเจกต์, ใช้ virtual environment, เขียนให้อ่านง่าย และทดสอบก่อนเสมอ คุณจะยกระดับจากผู้เริ่มต้นไปสู่คนที่ทำโปรเจกต์จริงได้เร็วมาก
