ในกรณีของรหัสที่คุณต้องทำการล้างทรัพยากรก่อนออกจากฟังก์ชันมีความแตกต่างที่สำคัญระหว่าง 2 วิธีในการทำมัน
การทำความสะอาดทรัพยากรก่อนทุกคำสั่งส่งคืน
void func() { login(); bool ret = dosomething(); if(ret == false) { logout(); return; } ret = dosomethingelse(); if(ret == false) { logout(); return; } dootherstuff(); logout(); }การทำความสะอาดทรัพยากรในบล็อกสุดท้าย
void func() { login(); try { bool ret = dosomething(); if(ret == false) return; ret = dosomethingelse(); if(ret == false) return; dootherstuff(); } finally { logout(); } }
ฉันทำการทดสอบขั้นพื้นฐานในโปรแกรมตัวอย่างและดูเหมือนจะไม่แตกต่างกันมากนัก ฉันชอบfinallyวิธีการทำแบบนี้มาก - แต่ฉันสงสัยว่ามันจะทำให้เกิดผลงานใด ๆ ในโครงการขนาดใหญ่หรือไม่
if(!cond)มันก็คือจาวาที่ทำให้ฉันทำอย่างนี้ ใน C ++, นั่นเป็นวิธีที่ผมเขียนรหัสทั้งสอง booleans และประเภทอื่น ๆ - int x; if(!x)คือ เนื่องจาก java อนุญาตให้ฉันใช้สิ่งนี้ได้เฉพาะbooleansฉันจึงหยุดใช้if(cond)& if(!cond)ใน java โดยสิ้นเชิง
(someIntValue != 0)มากกว่าการเปรียบเทียบมากกว่าการประเมินบูลีน นั่นทำให้ฉันมีกลิ่นและฉันจะทำให้มันสดชื่นทันทีที่เห็นในป่า