вторник, 28 марта 2017 г.

C++: Гетеросексуальный рефакторинг


Я просто оставлю это здесь:

   /* Alien-faggot-style and bwaaaaaaaaah! */  
   /* 0,25 ms evaluation time on Xeon */  
   /* 1 ms evaluation time on SPARC */  
   if (!(!s1.empty() && s2.empty())) {  
    .....some stuff...  
   } else {  
    .....some stuff...  
   }  
     
   /* Heterosexual refactoring :) */  
   /* Less 0,15 ms on Xeon */  
   if (!s2.empty()) {  
    .....some stuff...  
   } else if (!s1.empty()) {  
    .....some stuff...  
   }  
   
   /* Heterosexual refactoring 2 - best ever :) */  
   /* Less 0,05 ms on Xeon */  
   if (!s2.empty()) {   
    .....some stuff...  
   } else { /* else if (!s1.empty()) */  
    .....some stuff...  
   }  

Ну, вы поняли :) Не надо писать булевского ужаса :) Понятное дело, что тут рефакторинг зависит от внешних условий, которые на примере не показаны, однако он работает. И - да, в последнем примере хорошим тоном будет оставить комментарий в else, иначе логика неочевидна. :)