piomar123

Unduplicate code

Oct 5th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. // === Duplicated code ===
  2. HANDLE foo = AcquireFoo();
  3. if(!UseFoo(foo)){
  4.     ReleaseFoo(foo);
  5.     return FAIL;
  6. }
  7. // ...
  8. UseFooBar(foo);
  9. ReleaseFoo(foo);
  10. return OK;
  11.  
  12. // === fake do while ===
  13. int result = OK;
  14. HANDLE foo = AcquireFoo();
  15. do {
  16.     if(!UseFoo(foo)){
  17.         result = FAIL;
  18.         break;
  19.     }
  20.     // ...
  21.     UseFooBar(foo);
  22. } while (0);
  23. ReleaseFoo(foo);
  24. return result;
  25.  
  26. // === try/catch ===
  27. int result = OK;
  28. HANDLE foo = AcquireFoo();
  29. try {
  30.     if(!UseFoo(foo)){
  31.         throw MyException(FAIL);
  32.     }
  33.     // ...
  34.     UseFooBar(foo);
  35. } catch (const MyException & e) {
  36.     result = e.result;
  37. }
  38. ReleaseFoo(foo);
  39. return result;
  40.  
  41. // === goto ===
  42. int result = OK;
  43. HANDLE foo = AcquireFoo();
  44. if(!UseFoo(foo)){
  45.     result = FAIL;
  46.     goto release;
  47. }
  48. // ...
  49. UseFooBar(foo);
  50. release:
  51. ReleaseFoo(foo);
  52. return result;
  53.  
  54. // === another function ===
  55. int doSomething(HANDLE foo, int x, bool y /*, etc.. */){
  56.     if(!UseFoo(foo)){
  57.         return FAIL;
  58.     }
  59.     // ...
  60.     UseFooBar(foo);
  61.     return OK;
  62. }
Add Comment
Please, Sign In to add comment