แสดงบทความที่มีป้ายกำกับ Software Development แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Software Development แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 25 มิถุนายน พ.ศ. 2558

Clean Code

Clean Code


Credit by: This Book

Clean Code คืออะไร ? 

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

อ่านง่าย เป็นอย่างไร ให้เรานึกถึงหนังสือที่เราอ่าน แล้วรู้สึกสนุก จินตนาการตามได้ แบบนี้เลย

เขียนง่าย เป็นอย่างไร เราอ่านง่ายแล้ว เราก็เขียนหนังสือต่อจากจินตนาการตรงนั้นได้เลยใช่ไหมละ

แต่ถ้าเราเป็นคนเริ่มเขียนละ ยังไงดี เราก็เริ่มง่ายๆเหมือนกัน เขียนเหมือนเรากำลังเล่าเรื่องให้เพื่อนๆฟังเลย

เล่าอะไรดีละ ก็เล่าให้ตามที่ลูกค้าเล่าให้เราฟังเลย พูดกันไปตามนั้นเลย (แต่เราต้องคุยและชัดเจนกับประเด็นต่างๆของความต้องการของลูกค้าแล้วน่ะ)

ดูแลง่าย เป็นอย่างไร เมื่อเราเขียนง่าย อ่านง่ายแล้ว ทีนี้เมื่อมีการแก้ไขเปลี่ยนแปลง หรือจะเพิ่มแทรกตรงไหน ง่ายไหมที่เราจะหาจุดที่จะเปลี่ยน ง่ายไหมที่เราจะเพิ่มเติม ง่ายไหมที่เราจะหาจุดที่จะกระทบ

เรื่องของการเขียน Code ให้ Clean

Meaningful Names

อย่างที่บอกเขียน อ่าน ง่าย เหมือนเขียนเล่าเรื่อง เพราะฉนั้นเรื่องชื่อก็เช่นเดียวกัน ตั้งชื่อให้กับ Class, Method, Object ทุกๆอย่าง ต้องให้สื่อถึงความหมายอย่างชัดเจน ว่า ทำอะไร เช่น 
method บวกเลขสองตัว = ก็มีหน้าที่รับเลขแค่สองตัว แล้วเอาสองตัวบวกกัน ทำแค่นี้ตามชื่อที่บอก
เมื่อชื่อที่สื่อได้แล้วนั้นหมายความว่า คนอื่นๆที่เข้ามาอ่าน ต้องอ่านง่ายแล้วไม่ต้องใช้จินตนาการน่ะ

Functions

มีขนาดเล็ก จำนวนบรรทัด Code ที่น้อย แต่ยังต้องอ่านเข้าใจง่ายน่ะ 
การทำงานเพียงอย่างเดียว (Do One Thing) เป็นการทำงานเพียงเรื่องเดียวเท่านั้น 
อ่านจากบนลงล่าง คือเปิดไฟล์ Class แล้วสามารถอ่านจากบนลงล่างได้ในรอบเดียว


Comments

อ่านง่ายแล้วยังต่อมี Comment อีกเหรอ 

comment ที่มีมักจะเป็นเรื่องของการนำไปใช้ Java Doc เพื่อให้คนอื่นเข้าใจจุดประสงค์ที่ชัดเจนมากยิ่งขึ้น

comment มีเพื่อขยายความ Argument ที่ใช้ว่าคืออะไร เนื่องจากบางครั้งเราก็ encapsulation ไว้ 


Formatting

เดียวนี้เราใช้ IDE Tools ในการเขียนโปรแกรมกันหมดแล้ว ไม่ค่อยจะใช้พวก editor ทำงานกันแล้ว เราก็ควรจะใช้ Tools ให้เป็นประโยชน์น่ะ เราสามารถจัด format code ให้สวยงาม อ่านง่ายด้วย ทำอย่างสม่ำเสมอ หรือบางคนเขียนตรงตาม format อยู่แล้วก็ดีเลย แต่มีเรื่องนึงคือ เราทำงานกันเป็นทีม ซึ่งจะมีข้อตกลงกันในทีมว่า เราจะจัด format แบบไหน IDE Tools นี้แหละช่วยเราได้ง่ายเลย เพียงตั้งค่าให้เหมือนกันทุกคน แล้วก็ run key ลัดเพียง key เดียวเราก็ได้ format ที่เหมือนกันกับทุกคนแล้ว ทำให้เมื่อเรา review code กันก็ทำได้ง่ายเลย


Objects and Data Structures

การเขียน Object หรือโครงสร้างของ code ที่ทำหน้าที่หลายๆอย่าง ทำให้เกิด object หรือ structure ที่ไม่ได้เกี่ยวข้องกับชื่อ method โดยตรงนั้น แต่อยู่ใน method ด้วยซึ่งควรจะ extract ออกไป


Error Handling

เมื่อเรารู้แน่นอนว่า ถ้าโปรแกรมทำงานไม่ถูกต้องแล้วต้องเกิด error ออกมา ซึ่งเราสามารถที่จะจัดการกับ error ที่เกิดขึ้นตรงนั้นได้เลย โดยจะเป็นการแสดงผลทางหน้าจอให้ user ทราบ หรือจะเก็บเป็นข้อมูล หรือจะไปทำงาน business อีกแบบก็ได้

Boundaries

การใช้ Lib Third-Party กับ code ของเรานั้น ก็ควรที่จะรู้ว่า lib นั้นมีประโยชน์ต่อ code เรายังไง แล้วตรงนั้นมีปัญหาอะไรหรือไม่ ถ้าให้ดีก็รู้ว่ามันทำงานยังไงได้ด้วย ใช้อะไรบ้าง เพื่อที่เราจะได้เข้าใจได้เร็วขึ้นเมื่อเกิดปัญหาขึ้นมา ถ้าเราเขียน Test คลุมได้ ก็ทำเลยครับเป็นสิ่งที่จะทำให้เรามั่นใจได้

Unit Tests

การทำ unit test จะทำให้เราเริ่มเขียน code ได้ง่ายตรงตามความต้องการของลูกค้าได้อย่างรวดเร็วด้วย เมื่อต้องการแก้ไขก็ทำได้อย่างมั่นใจเลยว่ามันไม่กระทบ หรือกระทบก็รู้ได้ทันทีว่าที่ไหนเมื่อไร
กฎ 3 ข้อของ Test Driven Development คือ Test Fail, Test Pass และ Refactor 

Classes

Class เป็นสิ่งนึงที่เรามักจะใส่หลายๆเรื่องเข้าไป ซึ่งมันก็ไม่ควรเป็นเรื่องที่ไม่ใช่ตัวมัน
เช่น Class User ก็ควรมี method , object ที่เกี่ยวกับ user เท่านั้น ถ้า user นี้ซื้อของ 1 ชิ้น ควรจะมี order อยู่ใน Class User หรือไม่ เมื่อเรารู้ว่า class นี้คืออะไร ทำอะไร แค่ไหนแล้ว ก็ควรให้มีแค่นั้น ถ้าเป็นเรื่องอื่นก็เป็น class อื่นไป หรือถ้ามันสัมพันธ์กันก็ควรแยกไปเช่นเดียวกัน จะทำ line of code สั้นลงด้วย อ่านง่ายด้วย

Systems

ระบบ เหมือนกับเมืองเมืองนึง การจะสร้างได้ ก็ต้องเริ่มจากบ้านหลังเล็กๆ แล้วก็จะเกิดว่า บ้านแต่ละหลังนั้นต้องการอะไรๆที่เหมือนกันอยู่ เช่น น้ำประปา ไฟ 

Emergence


4 Simple Design Rule เป็นแนวคิดพื้นฐานของการออกแบบ Software กฎ 4 ข้อประกอบไปด้วย

  • All Test Pass เมื่อทุก Test ผ่านแล้ว เราก็จะทำการ refactor ได้น่ะ
  • Express Intent 
  • No Duplication (DRY)
  • Small


Concurrency

ทำอย่าง Thread-Safe 

Successive Refinement

การเขียน code ที่ดี เมื่อมีการปรับสิ่งที่จะ input เข้ามาเพิ่ม ก็แก้ไขได้ง่าย หรือจะลด ก็ทำได้ง่าย

JUnit Internals

เป็น framework ที่มีในทุก IDE ซึ่งจะช่วยให้เราทำ unit test ได้ง่ายขึ้นมากเลย

Refactoring SerialDate

การทำงาน


Smells and Heuristics

เมื่อ code เราเริ่มมีกลิ่นไม่ดี หรือเริ่มรกแล้วควรจะจัดการมันได้แล้ว