Clean Code คืออะไร?

Clean Code คืออะไร

Clean Code คืออะไร และประกอบด้วยอะไรบ้าง?

Clean Code คือโค้ดที่อ่านง่าย เข้าใจง่าย และสามารถแก้ไขได้ง่าย เป็นโค้ดที่ไม่ซับซ้อน เป็นโค้ดที่มี format รูปแบบ แบบแผน ที่ทำให้ Developer หลายคนสามารถทำงานร่วมกันในโปรเจ็กต์เดียวกันได้ง่าย

นี่เกี่ยวกับสาเหตุและโค้ด (ที่สะอาด)

ในอดีต เมื่ออธิบายสิ่งที่ Sonar ทำได้ผสมผสานคำอธิบายทั้งหมดเหล่านี้เข้าด้วยกัน ส่งผลให้เกิดความไม่สอดคล้อง (ในกรณีที่ดีที่สุด) และทำให้ชุมชนของเรา Sonar ยากที่จะเชื่อมโยงจุดต่างๆ เข้าด้วยกัน ประมาณสองปีที่แล้ว ได้ตัดสินใจแก้ปัญหานี้และเปิดตัวโครงการภายในเพื่ออธิบายสิ่งที่่ทำได้ดีขึ้น

สรุปง่ายๆ หลังจากพยายามมานาน Sonar ได้มาลงเอยที่ 3 ข้อหลักๆ

  1. โฟกัสเฉพาะโค้ด:  สิ่งที่ทำนั้นเกี่ยวข้องกับโค้ดโดยตรง และนี่คือวิธีที่ควรจะบรรยาย
  2. เน้นที่สาเหตุ ไม่ใช่ผลลัพธ์:  ควรโฟกัสไปที่ต้นตอของปัญหา ไม่ใช่ผลกระทบที่อาจเกิดขึ้น
  3. เราทำ ‘Clean Code’: ตั้งชื่อสิ่งที่ทำ ว่า ‘Clean Code’

เมื่อการตัดสินใจเหล่านี้เกิดขึ้น คุณจะได้เห็นคำว่า ‘Clean Code’ ปรากฏขึ้น ปัญหาได้รับการแก้ไขแล้วหรือยัง?  Sonar เข้าใจสิ่งที่เขาทำและโฟกัส แต่เขายังมีช่องว่างอยู่ นั่นคือ เขาจะจัดประเภทสิ่งที่ไม่ตรงกับ Clean Code ได้อย่างไร ในขณะเขาก็ยังคงยึดติดกับโค้ดจริง ที่ยังไม่ใช่ผลลัพธ์อยู่

ดังนั้น เราจึงเริ่มโครงการใหม่เพื่อพัฒนาระบบการจัดประเภท หรือที่เรียกว่า อนุกรมวิธาน

อนุกรมวิธาน Clean Code

แปลได้ดังนี้:

รากฐานของอนุกรมวิธาน Clean Code คือ โค้ดที่สะอาด และมีคุณสมบัติดังนี้

  • ความสอดคล้องกับแนวทางปฏิบัติ (Consistent)
  • ความตั้งใจชัดเจน (Intentional)
  • ความสามารถในการปรับเปลี่ยน (Adaptable)
  • ความรับผิดชอบ (Responsible)

กล่าวอีกนัยหนึ่ง ทุกครั้งที่โค้ดมีปัญหา ปัญหานั้นจะ “ทำลาย” หนึ่งในหมวดหมู่เหล่านี้

มาทบทวนทั้งสี่หมวดหมู่โดยละเอียดกันเถอะ

Consistent

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

ตัวอย่างที่ 1 :

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

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S1120/java

ตัวอย่างที่ 2 :

โค้ดควรใช้สำนวนภาษาและแนวทางวากยสัมพันธ์ที่เป็นที่นิยม ยกตัวอย่างเช่น ใน C++ เวอร์ชัน 11 ขึ้นไป สามารถประกาศ type aliases ได้ผ่านทั้ง typedef และ using แต่สำหรับโค้ดสมัยใหม่ควรเลือกใช้ using มากกว่า

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S5416/cfamily

Intentional

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

ตัวอย่างที่ 1 :โค้ดควรมีความชัดเจนและตรงไปตรงมา ยกตัวอย่างโค้ด Python นี้ จะสังเกตได้ว่าตัวแปร message และ i ถูกกำหนดไว้แต่ไม่เคยถูกใช้งาน เมื่อผู้อ่านเจอกรณีแบบนี้ อาจสงสัยว่ามันเป็นข้อผิดพลาดในการเขียนโค้ดที่ตั้งใจทำอะไรอย่างอื่น หรือเป็นแค่โค้ดที่เหลือค้างที่สามารถลบออกได้อย่างปลอดภัย

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S1481/python

ตัวอย่างที่ 2 :โค้ดควรมีเพียงคำสั่งที่มีเหตุผลทางตรรกะเท่านั้น ยกตัวอย่างเช่น ใน JavaScript มี NaN ซึ่งย่อมาจาก ‘Not-a-Number’ มันแทนชนิดข้อมูลตัวเลขที่ไม่ใช่ตัวเลขที่ถูกต้อง NaN ไม่เท่ากับค่าใดๆ แม้แต่ตัวมันเอง และพฤติกรรมนี้อาจนำไปสู่ผลลัพธ์ที่ไม่คาดคิดได้

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S2688/javascript

Adaptable

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

ตัวอย่างที่ 1 :โค้ดควรมีความชัดเจนและลดการซ้ำซ้อนให้น้อยที่สุด ตัวอย่างเช่น การซ้ำซ้อนของสตริงลิเทอรัล (ข้อความที่อยู่ในเครื่องหมายคำพูด) เพิ่มความเสี่ยงที่จะเกิดข้อผิดพลาดเมื่อทำการอัปเดต เนื่องจากต้องเปลี่ยนแต่ละครั้งที่ปรากฏแยกกัน วิธีที่ดีกว่านั้นคือการใช้ค่าคงที่ที่สามารถอ้างอิงได้จากหลายตำแหน่ง ซึ่งช่วยให้สามารถอัปเดตได้ในตำแหน่งเดียว นี่คือตัวอย่างการใช้ Ruby

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S1192/ruby

ตัวอย่างที่ 2 :โค้ดควรมีจุดมุ่งหมายชัดเจน โดยแต่ละหน่วยควรมีขอบเขตที่เฉพาะเจาะจงและจำกัด ยกตัวอย่างเช่น ใน Swift เป็นแนวทางปฏิบัติที่ดีที่สุดที่จะเก็บประเภทข้อมูล เช่น คลาส ไว้ในไฟล์แยกต่างหาก วิธีนี้จะช่วยป้องกันการสะสมของคำสั่งที่มากเกินไปหรือความซับซ้อนที่มากเกินไปภายในไฟล์เดียว

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

https://sonarsource.github.io/rspec/#/rspec/S1996/swift

Responsible

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

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

โค้ดที่ไม่มีความสอดคล้องกัน :

โค้ดที่มีความสอดคล้องกัน :

ตัวอย่างที่ 2 :โค้ดควรมีความถูกต้องตามกฎหมาย ควรเคารพกฎระเบียบพื้นฐานเกี่ยวกับการออกใบอนุญาตและลิขสิทธิ์ เป็นการรับรองสิทธิ์ของผู้สร้างและเคารพสิทธิ์ผู้อื่นในการออกใบอนุญาตโค้ดของพวกเขา

ตัวอย่างทั่วไปอีกอย่าง คือ บริษัทจะบังคับใช้ส่วนหัวลิขสิทธิ์ในไฟล์โค้ดของตนเอง

อ่านเพิ่มเติมได้ที่ : https://sonarsource.github.io/rspec/#/rspec/S1451/

แหล่งที่มา : https://www.sonarsource.com/blog/what-is-clean-code


 

💬 Line: @CyberDefense

☎️ Tel: 095-559-5585

✉️ Email: Hello@CyberDefense.co.th

🖥️ Facebook : https://www.facebook.com/CyberDefenseIT

Leave a Reply

Discover more from Cyberdefense

Subscribe now to keep reading and get access to the full archive.

Continue reading