paint-brush
Code Smell 285 - วิธีแก้ไขฟังก์ชันที่ไม่จำเป็นโดย@mcsee
277 การอ่าน

Code Smell 285 - วิธีแก้ไขฟังก์ชันที่ไม่จำเป็น

โดย Maximiliano Contieri3m2025/01/11
Read on Terminal Reader

นานเกินไป; อ่าน

ฟังก์ชั่นที่มีชื่อไม่ชัดเจนนั้นซ่อนเจตนาและทำให้ผู้อ่านสับสน ควรใช้ชื่อที่บรรยายถึงการกระทำ
featured image - Code Smell 285 - วิธีแก้ไขฟังก์ชันที่ไม่จำเป็น
Maximiliano Contieri HackerNoon profile picture
0-item

ต้องจำเป็น!!

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

ปัญหา

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

โซลูชั่น

  1. ใช้คำกริยาที่เน้นการกระทำ
  2. ตั้ง ชื่อ ให้สื่อความหมาย
  3. สะท้อนถึงวัตถุประสงค์ของการทำงาน
  4. หลีกเลี่ยงคำศัพท์ทั่วไป
  5. ให้บริบทที่มีความหมาย
  6. แสดงความรับผิดชอบอย่างชัดเจน
  7. การจับคู่การกระทำกับผลลัพธ์

การรีแฟกเตอร์

https://hackernoon.com/improving-the-code-one-line-at-a-time

บริบท

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


การทำเช่นนี้เป็นการเสียเวลาและเพิ่มโอกาสเกิดข้อผิดพลาด


การตั้งชื่อกลาย เป็นสิ่งสำคัญยิ่งขึ้นเมื่อทำงานกับฟังก์ชันแบบสแตนด์อโลน โดยที่ชื่อคลาสไม่ได้ให้บริบทเพิ่มเติม


ประเด็นนี้เกี่ยวข้องโดยตรงกับ หลักการบอกอย่าถาม


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


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

โค้ดตัวอย่าง

ผิด

 public String dateFormatting(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void load() { System.out.println("Loading..."); }

ขวา

 public String formatDate(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date); } public void loadUserPreferences() { System.out.println("Loading user preferences..."); }

การตรวจจับ

  • [x] คู่มือ

คุณสามารถตรวจจับกลิ่นนี้ได้โดยการตรวจสอบชื่อฟังก์ชันที่ใช้คำคลุมเครือ เช่น do , run , process , load เป็นต้น


ลินเตอร์อัตโนมัติสามารถทำเครื่องหมายรูปแบบเหล่านี้หรือเน้นฟังก์ชันที่มีชื่อทั่วไปมากเกินไป

แท็ก

  • การตั้งชื่อ

ระดับ

  • [x] ผู้เริ่มต้น

เหตุใดการแบ่งแบบ Bijection จึงมีความสำคัญ

ชื่อฟังก์ชันควรสร้าง ความสอดคล้องแบบหนึ่งต่อหนึ่ง ที่ชัดเจนระหว่างชื่อและฟังก์ชันการทำงาน


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

เจเนอเรชั่น AI

บางครั้งเครื่องมือ AI สร้างชื่อฟังก์ชันทั่วไปโดยไม่เข้าใจโดเมนของคุณ


เมื่อใช้ AI ให้ระบุว่าชื่อฟังก์ชันจะต้องอธิบายและเน้นการกระทำ

การตรวจจับด้วย AI

โมเดล AI ช่วยตรวจจับชื่อที่คลุมเครือได้โดยการเปรียบเทียบลายเซ็นฟังก์ชันกับแนวทางปฏิบัติที่ดีที่สุดในการตั้งชื่อที่กำหนดไว้ล่วงหน้า


การผสมผสาน AI เข้ากับการตรวจสอบโค้ดด้วยตนเองทำให้ได้ผลลัพธ์ที่ดีที่สุด

ลองดูสิ!

จำไว้ว่า: ผู้ช่วย AI ทำผิดพลาดมากมาย

โดยไม่มีคำแนะนำที่เหมาะสม

พร้อมคำแนะนำเฉพาะ

แชทGPT

แชทGPT

คล็อด

คล็อด

ความสับสน

ความสับสน

ผู้ช่วยนักบิน

ผู้ช่วยนักบิน

ราศีเมถุน

ราศีเมถุน

บทสรุป

ชื่อฟังก์ชันไม่ใช่แค่ป้ายกำกับ แต่เป็นสัญญากับผู้อ่าน


การใช้ชื่อที่ไม่ชัดเจนถือ เป็นการทำลายสัญญานี้และทำให้เกิดความสับสน


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

ความสัมพันธ์

ดูเพิ่มเติม

การปฏิเสธความรับผิดชอบ

Code Smells เป็น ความคิดเห็น ของฉัน

เครดิต

ภาพถ่ายโดย britishlibrary บน Unsplash


ชื่อฟังก์ชันควรเป็นกริยาหรือวลีกริยา และต้องมีความหมาย

โรเบิร์ต ซี. มาร์ติน


บทความนี้เป็นส่วนหนึ่งของซีรีส์ CodeSmell


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

แขวนแท็ก

บทความนี้ถูกนำเสนอใน...