Page 65 - 4787
P. 65

тимчасові  змінні,  які  використовуються  тільки  всередині  цього  виділеного

               коду. Якщо такі змінні є,  їх оголошують як тимчасові змінні в створюваному


               методі. Треба переконатися, чи  модифікує виділений код які-небудь змінні з


               локальної  областю  видимості.  Якщо  модифікується  одна  змінна,  спробуйте

               перетворити  виділений  код  у  виклик  іншого  методу,  результат  якого


               присвоюється  цій  змінній.  Якщо  це  важко  або  таких  змінних  кілька,  в


               існуючому  вигляді  виділити  метод  не  можна.  Спробуйте  спочатку  виконати

               «Розщеплення  тимчасової  змінної»  (Split  Temporary  Variable),  а  потім  знову


               виділити  метод.  Тимчасові  змінні  можна  ліквідувати  за  допомогою  «Заміни

               тимчасових змінних викликом методів» (Replace Temp with Query).


                     Передайте в створюваний метод як параметри змінні з локальної областю


               видимості, читання яких здійснюється у виділеному коді. Впоравшись з усіма

               локальними  змінними,  виконайте  компіляцію.  Замініть  у  вихідному  методі


               виділений  код  викликом  створеного  методу.  Якщо  будь-які  тимчасові  змінні


               переміщені в створений метод, знайдіть їх оголошення поза виділеним кодом.

               Якщо такі є, можна їх видалити.


                     Приклад 2. Заміна тимчасової змінної викликом методу.


                     Тимчасова  змінна  використовується  для  зберігання  значення  виразу.

               Перетворіть  вираз  у  метод.  Замініть  всі  посилання  на  тимчасову  змінну


               викликом методу. Новий метод може бути використаний в інших методах.

                     До проведення рефакторингу


                     double basePrice = _quantity * _itemPrice;

                     if (basePrice > 1000) {

                            return basePrice * 0.95;
                     }

                     else {
                          return basePrice * 0.98;


                                                                                                             64
   60   61   62   63   64   65   66   67   68   69   70