การตั้งชื่อวิธีการ "ทำ X ถ้าจำเป็น"


23

เป็นวิธีที่ดีในการตั้งชื่อวิธีการที่ตรวจสอบว่า X จะต้องทำคืออะไรและ X มันถ้าจำเป็น?

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

C # มีbool TryXXX(args, out result)รูปแบบ (เช่นint.TryParse(str, out num)) เพื่อตรวจสอบว่า X เป็นไปได้และทำมัน แต่นั่นแตกต่างอย่างละเอียด


1
เพียงจุดแนะนำวิธีการเช่นนี้ในขณะที่มีเจตนาดีควรสร้างขึ้นด้วยความระมัดระวัง ตามวิธีที่พวกเขามักจะได้รับการ peppered เป็นรหัสที่ไม่เกี่ยวข้องภายใต้หน้ากากของ "ในกรณี" หรือ "การเพิ่มการเรียกไปใน X () แก้ไขข้อผิดพลาด แต่ฉันไม่แน่ใจว่าทำไม" หากคุณมีระเบียบวินัยที่จะโทรมาเฉพาะRefreshUserList()ในระหว่างLoginUser()และLogoutUser()ไม่ได้อยู่ในระหว่างพูดGetUser()(ที่รายการควรจะทันสมัยแล้ว) โดยทุกคำแนะนำด้านล่างใช้
Kevin McCormick

คำตอบ:


25

Ensureฉันมักจะใช้ มันมีความหมายในการทำให้แน่ใจว่ามีบางสิ่งได้รับการดูแล แต่จำเป็นต้องทำ ถ้ามันใช้ได้ดีแค่ตรวจสอบแล้วเราก็เสร็จแล้ว มิฉะนั้นทำ ไม่ว่าจะด้วยวิธีใดเพียงตรวจสอบให้แน่ใจว่าได้ทำไปแล้ว


13

UpdateListการตั้งค่าของฉันคือ ถ้าไม่มีอะไรจำเป็นต้องทำ ควรลดค่าใช้จ่ายให้น้อยที่สุดอยู่เสมอดังนั้นหากUpdateListทำมากกว่าที่จำเป็นบางสิ่งไม่ถูกต้องในการนำไปใช้

โดยพื้นฐานแล้วมันเป็นคำกริยาที่บอกคุณว่าควรทำอย่างไร CalculateXควรคำนวณ X อีกครั้ง GetYควรส่งคืน Y เสมอ แต่ทำงานเพื่อเรียกคืนได้ในกรณีที่จำเป็นเท่านั้น ในทำนองเดียวกันUpdateZขอให้มีการอัปเดตของ Z โดยสมมติว่าทำไปอย่างมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้


2

โทรหาฉันก็ได้นะ"

เลือกร่วมกับตัวอย่าง Haskell ที่ฉันเคยเห็นลอง

UpdateListMaybe();

2
ฉันคิดว่าถ้าฉันเข้าใจแฮสเคลล์ดีกว่านี่อาจทำให้รู้สึกมากกว่านี้ ข้อสรุป: หากมีการใช้ภาษาอื่นนอกเหนือจาก Haskell ผู้ที่รู้จัก Haskell จะเข้าใจได้เท่านั้น
Robert Harvey

2
หกปีต่อมาฉันเป็นโปรแกรมเมอร์ที่แตกต่างและมีความรู้เกี่ยวกับสิ่งต่างๆของ Haskell เพิ่มขึ้นเล็กน้อย ฉันไม่รับรองคำตอบนี้อีกแล้วฮ่า ๆ ฉันคิดว่าความคิดของฉันในเวลานั้นคือการใช้คำว่า "อาจจะ" เพื่อบ่งบอกว่าฟังก์ชั่นนั้นจัดการกับตัวเลือกบางประเภท ฉันยังคงทำเช่นนั้นบางครั้ง (เช่นตัวเลือก [A] => B เรียกว่าอาจเป็น ToB)
Mark Canlas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.