Skip to main content

“ตอนเด็กๆ เวลาเราเรียนก็จะมีบางวิชาที่ต้องเขียนรายงานใช่มั้ยครับ? เวลาที่เราออกไปอ่านรายงานหน้าห้อง ถ้ารายงานที่เป็นส่วนของเพื่อนของเรามีการเว้นวรรคที่ไม่ดี หรือ ไม่มีย่อหน้าเลย ตัวหนังสือติดกันเป็นพรืด เราก็คงจะหงุดหงิดเป็นธรรมดา”

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

1. ขึ้นบรรทัดใหม่ก่อนหรือหลัง operator ดี?

income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)

ปกติแล้วเวลาเราอ่านตัวอักษรเราจะอ่านจากซ้ายไปขวา ดังนั้นเมื่อเราขึ้นบรรทัดใหม่หลังจากตัว operator อาจทำให้เราสับสนได้ เนื่องจากตัวoperator กับ operand อยู่ไกลเกินไป

income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

การขึ้นบรรทัดใหม่ก่อนตัว operator จะทำให้เราอ่านได้ง่ายกว่าและจับคู่ได้ง่ายเพราะไม่ต้องกวาดสายตาไปไกล

2. การเว้นวรรคที่ดี

การเว้นวรรคที่ไม่จำเป็นจะทำให้โค้ดอ่านยากขึ้น

spam( ham[ 1 ], { eggs: 2 } )
bar = (0, )
if x == 4 : print x , y ; x , y = y , x

จากตัวอย่างจะเห็นว่าถ้าเราเว้นวรรคเยอะเกินไปจะทำให้โค้ดของเราดูเยอะต้องกวาดสายตานานกว่าจะอ่านจบแต่ละบรรทัด แถมยังดูยากอีกด้วยว่าโค้ดของเราใช้ทำอะไรบ้าง การเว้นวรรคนั้นใช้หลังเครื่องหมาย ‘,’, ‘ และ ‘;’ ก็พอแล้ว

spam(ham[1], {eggs: 2})
foo = (0,)
if x == 4: print x, y; x, y = y, x

เท่านี้โค้ดของเราก็ดูกระชับและ map การกระทำได้ง่ายขึ้นแล้ว

3. แยกการเว้นวรรคตาม priority ของ operator

i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

การเว้นวรรคระหว่าง operator ทุกครั้งไม่ใช่่ทางเลือกที่ดีเสมอไป เพราะจะทำให้เราใช้เวลานานในการอ่านว่าส่วนไหนทำงานก่อนกันแน่

i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

การเว้นวรรคหลังจากการเปลี่ยน priority ของ operator จะทำให้เราจับคู่ได้ง่ายขึ้น

4. ไม่ควรใช้ compound statement

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

บางคนอาจจะบอกว่าโค้ดที่สั้นนั้นอ่านง่าย แต่การให้โค้ดทำงานหลายอย่างใน 1 บรรทัดก็ไม่ใช่กับทุกคนเสมอไป เพราะเมื่อคนอื่นมาอ่านโค้ดเราแต่ละบรรทัดก็จะต้องมาตีความว่าโค้ดแต่ละบรรทัดทำอะไรลงไปบ้าง เราควรให้ 1 บรรทัด ทำงานเพียงอย่างเดียวเพื่อความง่ายต่อการอ่าน

if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()

5. is not และ not…is

ใช้ “is not” แทนที่จะใช้ “not…is” ถึงทั้งสองแบบจะทำงานเหมือนกัน แต่ว่าแบบแรกจะทำให้อ่านโค้ดและทำให้เข้าใจได้ง่ายมากกว่า 

Yes: if foo is not None:
No:  if not foo is None:

6. string method

ใช้ string method แทนที่จะใช้ string module เพราะว่าทำงานได้เร็วมากกว่า ตัวอย่างเช่น  ใช้ “.startswith()” และ “.endswith()” แทนการสไลด์ string เพื่อตรวจสอบข้อความขึ้นต้นหรือลงท้าย

Yes: if foo.startswith('bar'):
No:  if foo[:3] == 'bar':

7. ใช้ is แทน ==

อย่าตรวจสอบค่าความจริง (True / False) ของตัวแปรประเภท boolean ด้วยการใช้เครื่องหมาย ==

Yes:   if greeting:
No:    if greeting == True:
Worse: if greeting is True:

8. การตั้งชื่อ constant

ตั้งชื่อ constant ด้วยการใช้ตัวอักษรพิมพ์ใหญ่ทั้งหมด เช่น

PI = 3.14
TOTAL_DOGS = 10

เนื่องจากในภาษา python นั้นไม่สามารถประกาศตัวแปรหรือค่าใดๆให้เป็น constant ได้ ดังนั้นการตั้งชื่อตัวแปรให้ดีและถูกต้องจึงเป็นสิ่งสำคัญมากๆ

9. ชื่อตัวแปรต้องห้าม

หลายครั้งที่เราอาจใช้ชื่อตัวแปรเพียงตัวเดียวในการเขียนโค้ด อาจเป็นเพราะตัวแปรที่มีอายุการใช้งานที่สั้น เช่น ตัวแปรที่ใช้นับใน loop เรามักจะใช้ตัวอักษร‘i’(ไอเล็ก)ในการตั้งชื่อ ซึ่งการตั้งชื่อตัวแปรที่มีตัวอักษรตัวเดียวก็มีตัวอักษรที่ไม่ควรตั้งเช่น ‘I’(ไอใหญ่) และ ‘l’ (แอลเล็ก) จะเห็นว่าตัวอักษร2ตัวนี้มีหน้าตาที่แทบจะเหมือนกัน หรือ ‘o’(โอ) ก็มีความใกล้เคียงกับศูนย์ ดังนั้นจึงไม่ควรใช้ในการตั้งชื่อ
อย่างไรก็ตามการตั้งชื่อตัวแปรก็ควรใช้เป็นคำที่เหมาะสมกับบริบทการใช้ตัวแปรนั้นๆจะเป็นการดีที่สุดเช่นตัวแปรที่ใช้เก็บค่าผลลัพธ์ ก็อาจจะใช้คำว่า ‘result’ ในการตั้งชื่อตัวแปรเป็นต้น

10. isinstance() แทน is type() ในobject

การเปรียบเทียบ object ควรใช้ฟังก์ชัน isinstance() แทนการตรวจสอบ type โดยตรง เช่น

Yes: if isinstance(obj, int):
No:  if type(obj) is type(1):

ข้อควรระวัง ใน Python 3 นั้นตัวแปรประเภท string นั้นมีเพียงแค่ str เพียงอย่างเดียว ในขณะที่ Python 2 นั้นมี str และ unicode string ซึ้งสองตัวนี้มี base class เดียวกันคือ basestring ดังนั้นเวลาจะตรวจสอบว่า object เป็น string รึเปล่า ใน Python3 และ Python 2 จึงเขียนได้แบบนี้

Python 3:

if isinstance(obj, str):

Python 2:

if isinstance(obj, basestring):

จบแล้วครับกับตัวอย่าง guide line ในการเขียน python ทุกคนคงจะรู้แล้วว่าการเขียน guide line นั้นส่งผลต่อการอ่านขนาดไหน เวลาที่เราอ่านโค้ดของเพื่อนร่วมงานเราก็อยากอ่านโค้ดที่อ่านง่ายใช่มั้ยล่ะครับ เพื่อนของเราก็เช่นกัน ดังนั้นเวลาที่ต้องเขียนโค้ดไม่ว่าจะเป็นภาษาอะไรก็อย่าลืมที่จะอ่าน guide line และทำตาม guide line ของภาษานั้นๆด้วยนะครับ


บทความนี้อ้างอิงจาก: https://www.python.org/dev/peps/pep-0008/ ถ้าใครสนใจที่จะศึกษา guide line แบบเต็มๆ ลองเข้าไปดูได้เลย!

หากคุณสนใจพัฒนา สตาร์ทอัพ แอปพลิเคชัน และ เทคโนโลยีของตัวเอง ?

อย่ารอช้า ! เรียนรู้ทักษะด้านดิจิทัลเพื่ออัพเกรดความสามารถของคุณ
เริ่มตั้งแต่พื้นฐาน พร้อมปฏิบัติจริงในรูปแบบหลักสูตรออนไลน์วันนี้

Developer

Author Developer

More posts by Developer

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

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

บันทึกการตั้งค่า