ในฐานะส่วนหนึ่งของการเขียน Iterator ฉันพบว่าตัวเองเขียนโค้ดต่อไปนี้ (การจัดการข้อผิดพลาดในการลอก)
public T next() {
try {
return next;
} finally {
next = fetcher.fetchNext(next);
}
}
พบว่าอ่านง่ายกว่าเล็กน้อย
public T next() {
T tmp = next;
next = fetcher.fetchNext(next);
return tmp;
}
ฉันรู้ว่ามันเป็นตัวอย่างง่ายๆที่ความแตกต่างของความสามารถในการอ่านอาจจะไม่มากนัก แต่ฉันสนใจในความคิดเห็นทั่วไปว่าไม่ดีที่จะลองใช้ในที่สุดในกรณีเช่นนี้ที่ไม่มีข้อยกเว้นที่เกี่ยวข้องหรือ ถ้ามันเป็นที่ต้องการจริง ๆ เมื่อมันลดความซับซ้อนของรหัส
ถ้ามันไม่ดี: ทำไม สไตล์ประสิทธิภาพข้อผิดพลาด ... ?
บทสรุป ขอบคุณคำตอบทั้งหมดของคุณ! ฉันเดาข้อสรุป (อย่างน้อยสำหรับฉัน) คือตัวอย่างแรกอาจอ่านง่ายกว่าถ้ามันเป็นรูปแบบทั่วไป แต่ไม่ใช่ ดังนั้นความสับสนที่เกิดขึ้นจากการใช้สิ่งก่อสร้างนอกจุดประสงค์รวมถึงการไหลของข้อยกเว้นที่สับสนจะทำให้มีความเรียบง่ายมากกว่า
Iterator
ซึ่งคุณต้องใช้การดึงข้อมูลล่วงหน้าเพื่อhasNext()
ทำงาน ลองด้วยตัวคุณเอง
Iterator
คือคุณต้องดึงค่าในhasNext()
('ทำให้การดึงมันมักจะเป็นวิธีเดียวที่จะหาว่ามันมีอยู่จริง) และคืนมันกลับมาnext()
เหมือนที่ OP ทำ
finally
บล็อก