Objective-C Coding Style : Naming

สิงหาคม 17, 2011 at 4:33 pm 2 ของความคิดเห็น

“ภาษา” เป็นสิ่งที่ถูกประดิษฐ์ขึ้น เพื่อสื่อสารระหว่างกัน ภาษาไทย, ภาษาอังกฤษ, ภาษามือ, ภาษากาย ฯลฯ ล้วนแล้วแต่เป็นสิ่งที่ถูกประดิษฐ์ขึ้นเพื่อการสื่อสารทั้งสิ้น รวมทั้ง “ภาษาโปรแกรมมิ่ง” ก็คือสิ่งที่โปรแกรมเมอร์ใช้สื่อสารกับคอมพิวเตอร์เช่นเดียวกัน แต่นอกเหนือจากนั้น มันก็เป็นภาษาที่สื่อสารระหว่างโปรแกรมเมอร์เช่นเดียวกัน

สิ่งที่ผมเกริ่นมาข้างต้น คือความสำคัญของหัวเรื่องเรื่องนี้ เรื่อง Coding Style ของ Objective-C จริงๆเรื่องของ style มันเป็นของใครของมัน แต่ใน Entry นี้ผมขอโฟกัสกับ style ที่ “พึงกระทำด้วยประการทั้งปวง” การที่โค้ดของคุณอ่านง่ายเข้าใจง่ายไม่ซับซ้อน หรือที่ฝรั่งเรียกว่า “Clean Code” นั้น ช่วยเพิ่มประสิทธิภาพการทำงานเป็นทีม การลดเวลาการทำงานของคนที่มาทำงานต่อจากคุณ(เช่นการแก้บั๊ก) และง่ายต่อการ Optimize, Refactor หรือประโยชน์อื่นๆทั้งปวงในกระบวนการ Software Development

ใน Entry นี้ผมขอ Cover แค่เรื่อง “การตั้งชื่อ” ในการเขียน Code ภาษา Objective-C เท่านั้นนะครับ จริงๆเรื่องมันเล็กมาก มากจนผมไม่เคยคิดว่าจะมีคนทำด้วยซ้ำ แต่กระนั้น …ผมก็เจอกับตัวเองมาทุกเคส (จนต้องมาเขียนบลอกนี่แหละ) …แต่อย่างที่บอกว่าเรื่องของ Style เป็นเรื่องส่วนบุคคล มีแค่บางข้อเท่านั้นที่ผมอยากระบุเลยว่า “ควรทำตาม” แต่บางข้อก็ “แล้วแต่คุณ” ว่าแล้วก็ไปดูกันเลย

ใน Objective-C การตั้งชื่อตัวแปรโดยรูปแบบของคำ ควรเป็นลักษณะที่เรียกว่า “Camel Case” คือขึ้นต้นแต่ละคำในชื่อด้วยตัวพิมพ์ใหญ่ ส่วนตัวแรกจะเป็นพิมพ์ใหญ่ก็ต่อเมื่อเป็นชิื่อ Class เท่านั้น นอกนั้นขึ้นด้วยพิมพ์เล็กหมด เช่น MyClass, myAttribute, -(void)myFunctionWithParameter:(id)param เป็นต้น ข้อนี้จัดเป็นเรื่อง “พึงปฏิบัติตามด้วยประการทั้งปวง” แต่ข้อนี้ขอเพิ่มเติมว่า “เขียนภาษาไหนก็ตามแบบนั้นไป” ดีที่สุด

การตั้งชื่อตัวแปร หรือ attribute ของ Class ในภาษา Obj-C นั้น ถูกระบุในเอกสารของ apple อย่างชัดเจนว่า “ขึ้นต้นด้วยตัวพิมพ์เล็ก เสมอ!!” ใครที่กำลังติดนิสัยนี้อยู่ เปลี่ยนพฤติกรรมเถอะครับ เรื่องการตั้งชื่อเป็นเรื่องสามารถทำให้เกิดความเข้าใจผิดได้อย่างมากมาย เพราะการตั้งชื่อขึ้นต้นด้วยตัวพิมพ์ใหญ่ มันหมายถึง “ชื่อ Class” อันนี้เรื่องใหญ่ครับ ขอจัดความสำคัญอยู่ในระดับ “พึงปฏิบัติตามด้วยประการทั้งปวง”

ส่วนการตั้งชื่อโดยใช้ _(Underscore) ในการเติมด้านหน้าหรือต่อท้าย เป็นเรื่องที่ “ทำได้” ครับ เป็นการป้องกันการเรียกใช้ตัวแปรที่ชื่อซ้ำกันได้ เช่น tableView ที่เป็น attribute กับ tableView ที่เป็นค่าที่ return มาจาก delegate method หรืออาจใช้เพื่อระบุว่าเป็น class attribute เจาะจงว่าเป็น private class attribute แบบนี้ก็ยังโอเคครับ ไม่ผิดกฎอะไรใดๆ และเป็นที่ใช้กันอยู่ทั่วไป

เรื่องก้ำกึ่งอยู่เรื่องนึงเกี่ยวกับการตั้งชื่อคือเรื่องการ “ย่อ” เรื่องนี้อยากจะบอกถึงน้องๆที่เริ่มเขียนโปรแกรมลงไปเลยด้วยซ้ำ ว่า “อย่าติดนิสัยการตั้งชื่อโดยไม่สื่อความหมายเลยครับ” ไอ้ int a, bool b, char *c เนี่ย หยุดเถอะครับ โอเคว่ามันไม่ใช่กฎ แต่เรียกว่าเป็น “มารยาท” ก็แล้วกันครับ จะมียกเว้นไว้บ้างบางตัวก็ถ้าเป็น i แล้ววนลูป อันนี้เชื่อว่าเป็น de-facto (หมายถึงมาตรฐานที่รู้ๆกันทั่วไป) แต่ผมก็ใช้ idx มากกว่านะ อันนี้ก็แนะนำว่า ชื่อยาวนิด แต่สื่อความหมาย ดีกว่าสั้นกุดแต่ไม่รู้ห่าอะไรเลยครับ”

…นี่แหละครับ หลักๆของการตั้งชื่อในภาษา Objective-C แค่นี้เอง ง่ายมาก บางคนอาจไม่เข้าใจเพราะคุ้นกับภาษาอื่นมากกว่า เลยติดมา อันนี้ก็คงต้องปรับตัวให้เหมาะสมกับงานที่ทำและภาษาที่ใช้ไปนั่นแหละครับ ส่วนใครที่เริ่มหัดเขียนก็เริ่มฝึกให้ถูกต้องนะครับ

Entry นี้อาจจะดูเขียนแบบ “ใส่อารมณ์” เข้าไปบ้าง เพราะเจอกับตัวเองมาตรงๆทุกข้อ(เจอความลำบากในการแก้งานที่ตั้งชื่ออย่างมีปัญหา) ใครไม่พอใจก็ผ่านไปนะครับ อย่าว่ากัน สำหรับ Entry นี้ ขอจบแต่เท่านี้ครับ Happy clean coding ครับ :)

Entry filed under: Cocoa Programming, iPhone Programming, Tips & Techniques. Tags: , , , , , , .

[Diary] เมื่อต้องมาเป็น “อีสุกอีใส” เอาตอนแก่… ARC (Automatic Reference Counting) Part I

2 ความเห็น Add your own

  • 1. memogames  |  สิงหาคม 17, 2011 ที่ 4:56 pm

    ผมว่าหลักๆ ทุกภาษาก็น่าจะมีกฎประมาณนี้?ครับ แต่ไม่แน่ใจนะ ที่มหาลัยผมเน้น Java ตอนเรียนการตั้งชื่อ Class หรือ ตัวแปร อะไรพวกนี้ก็ตามนี้เลยครับ แต่ภาษาอื่นไม่แน่ใจนะ แต่ถ้าเจองานเร่งๆ ก็จัดมั่วไปเหมือนกัน เพลีย ฮ่าๆ

    ตอบกลับ
    • 2. Jerapong Nampetch  |  สิงหาคม 17, 2011 ที่ 11:38 pm

      ครับ หลักๆเลยเรื่องตัวพิมพ์เล็กพิมพ์ใหญ่นี่น่าจะเหมือนกันแทบทุกภาษา ยกเว้นเรื่อง camel case ที่ไม่ได้เหมือนกันทุกภาษา อย่างเช่น C หรือ php จะใช้ _ คั่นคำมากกว่า

      แต่ก็อย่างที่เคยเห็นอ่ะครับตั้ม ว่ามีโค้ดที่ไม่เขียนตามนี้มันมีจริง(จากที่เราเคยทำงานกัน) แล้วมันเพลียแค่ไหนตอนแก้ :P

      ตอบกลับ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


del.icio.us For iPhone dev

Post Calendar

สิงหาคม 2011
พฤ อา
« ก.ค.   ต.ค. »
1234567
891011121314
15161718192021
22232425262728
293031  

%d bloggers like this: