หลายครั้งเวลาที่เราเขียนโค้ด เราอาจจะบอกว่าเรารู้การทำงานทั้งหมดดีอยู่แล้ว ไม่ว่าจะถามถึงบรรทัดไหนก็ตอบได้แน่นอน แต่ถ้าเราไม่ได้จับโค้ดมาเป็นระยะเวลานานจนลืมโค้ด แล้วต้องกลับมาแก้ไขโค้ดของเราล่ะจะสามารถอ่านโค้ดของเราแล้วแก้ไขได้เหมือนเดิมหรือเปล่า หรือถ้าทำงานร่วมกับคนอื่นแล้วคนอื่นบอกโค้ดของเราอ่านยาก หรือแก้ยากหรือเปล่า วันนี้เลยจะมาแนะนำตัวอย่างโค้ดที่จำเป็นต้องได้รับการทำความสะอาดเพื่อให้โค้ดอ่านและแก้ไขง่ายขึ้น
โค้ดซ้ำซ้อน
โค้ดประเภทนี้มักเกิดขึ้นบ่อยๆ ในกรณีที่มีการเขียนโปรแกรมเดียวกันหลายๆคน คนเขียนโค้ดก็จะเขียนโค้ดที่ตอบสนองต่อความต้องการของการทำงานในส่วนที่ตนเองเขียนอยู่ แต่บางครั้งเราก็จะเขียนโค้ดบังเอิญไปทำงานซ้ำกับโค้ดของเพื่อนเรา ถึงแม้หน้าตาจะต่างกันแต่การที่มีโค้ดที่ทำงานเหมือนกันนั้นเป็นเรื่องที่ไม่ดีนัก ทำให้เวลาอ่านโค้ดจะอ่านยากและทำให้มีโค้ดที่เกินจำเป็น
วิธีแก้ไข :
- ให้สร้าง method แยกออกมาแล้วโยงการทำงานไปที่ method นั้นแทน
- หรือถ้าโค้ดที่ซ้ำกันนั้นเป็น mthod อยู่แล้วให้เลือกอันที่ดีที่สุดแล้วโยงไปที่จุดน้น
คลาสใหญ่เกินไป
หลายครั้งที่เราเขียนโค้ดเพลินๆนึกอะไรได้ก็จับยัดใส่เข้าไปในโค้ดที่เราเขียนอยู่ อาจทำให้คลาสของเราบวมขึ้นมาโดยไม่รู้ตัว คลาสนั้นกลายเป็นว่าทำงานแทบจะทุกอย่างในโปรแกรมของเราไปแล้ว พอจะหาการทำงานส่วนนี้ก็ไม่รู้ว่าอยู่บรรทัดไหนกันแน่ ถ้าเราเจอปัญหาแบบนี้ก็แสดงว่าเราต้องจัดการกับมันแล้วล่ะ
วิธีแก้ไข :
- แตกคลาสออกมาเป็นคลาสย่อยๆ ให้การทำงานเหลือเพียงอย่างเดียวในแต่ละคลาส
เปลี่ยนทีนึงต้องไปแก้หลายจุด
อันนี้จะเป็นปัญหาที่ตรงข้ามกับก่อนหน้าคือเวลาที่เราจะแก้การทำงานส่วนนึงเราต้องไปเปลี่ยนโค้ดหลายจุดมากถึงจะสามารถทำงานได้ ปัญหานี้อาจเกิดจากที่เราแบ่งการทำงานออกมามากเกินไป เมื่อต้องการแก้อะไรนิดหน่อยทำให้มันไปกระทบกับฟังก์ชันการทำงานอื่นๆ
วิธีแก้ไข :
- รวมการทำงานที่แยกย่อยเกินไปเข้าด้วยกันให้เป็นการทำงานหลักเพียงคลาสเดียว
- ตอนที่ออกแบบควรมองภาพรวมว่าควรแตกคลาสถึงระดับไหนไม่ให้แยกเกินไป
โค้ดเผื่ออนาคต
บางครั้งที่เราเขียนโค้ด เราก็มักจะคิดไว้ก่อนว่าการทำงานของมันมีอะไรบ้าง รับพารามิเตอร์อะไรบ้าง แล้วก็จะประกาศคลาสขึ้นมาโดยใส่พารามิเตอร์ที่คิดเอาไว้แล้ว แต่พอใช้งานจริง พารามิเตอร์บางตัวกลับไม่ได้ใช้หรือเราลืมไปว่าพารามิเตอร์ประกาศไว้ใช้ทำอะไร หรือเราสร้างคลาสที่มีชื่อเตรียมเอาไว้แต่พอกลับมาอ่านก็งงว่าคลาสนี้ใช้ทำอะไร
วิธีแก้ไข :
- ให้ประกาศเท่าที่จำเป็นจะใช้ในตอนนั้นๆก็พอ
อ่านจนถึงตอนนี้แล้วก็อย่าลืมกลับไปดูโค้ดของตัวเองว่ามีอะไรแบบนี้อยู่รึเปล่า ถ้ามีแล้วล่ะก็อย่าลืมไปจัดการแก้ไขด้วยนะ ถ้าใครอยากรู้เพิ่มเติมเกี่ยวกับโค้ดที่ต้องการคลีน ก็สามารถดูเพิ่มเติมได้ที่ https://refactoring.guru/refactoring/smells