Як проводити рефакторинг?

Як проводити рефакторинг?

Відео: Андрій Гордієнко - Рефакторинг коду з використанням PostSharp

У попередній статті ми з Вами розібрали що таке рефакторинг. А в цій статті ми розберемо приклад рефакторінга конкретного працюючого коду. Після прочитання цієї статті Ви дізнаєтесь, як проводити рефакторинг.

Припустимо, у нас є такий PHP-код:

lt ;?php
$ array
= array() -
for($ i =0- $ i lt;100000- $ i++){
$ array
[$ i]= $ i-
}
$ result
=0-
for($ i =0- $ i lt; count($ array) - $ i++){
$ result
+= round($ array[$ i]* sqrt($ i)) -
}
echo $ result
-
?gt;

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

Відео: BEM (БЕМ) & SMACSS - Sass методології для організації проектів




Почнемо з швидкодії. Я вже писав, як дізнатися час виконання скрипта, тому повторюватися не буду.

Отже, заміривши час роботи даного скрипта у мене вийшло приблизно 0.30 секунди. Перше, що можна відразу виправити - це створення масиву. Справа в тому, що в PHP є дуже проста функція range (), яка робить все рівно так само, як і у нас, тільки швидше:

Відео: Як провести вихідні з користю?!

lt ;?php
$ array
= range(0,99999) -
$ result
=0-
for($ i =0- $ i lt; count($ array) - $ i++){
$ result
+= round($ array[$ i]* sqrt($ i)) -
}
echo $ result
-
?gt;



Час виконання вже 0.24 секунди, непогано виграли, плюс кількість коду різко скоротилося.

Тепер розберемо дуже популярний вид дублювання, а саме у вказівці умови виходу з циклу. В даному коді ми в кожній ітерації обчислюємо довжину масиву. Але навіщо? Адже вона постійна і не змінюється. Цю «помилку» допускають практично всі професіонали, в тому числі, і я. В основному, просто за звичкою, тому що так пишуть всі. І варто зазначити, якщо масив не дуже великий, то з точки зору читабельності так і варто залишити, але коли масив величезний, то треба писати так:

lt ;?php
$ array
= range(0,99999) -
$ result
=0-
$ count
= count($ array) -
for($ i =0- $ i lt; $ count- $ i++){
$ result
+= round($ array[$ i]* sqrt($ i)) -
}
echo $ result
-
?gt;

Час виконання вже 0.17 секунди, а це вже великий виграш у часі.

Тепер займемося кількістю коду. Ми вже з Вами в цьому напрямі попрацювали, і нам залишилося лише прибрати непотрібні фігурні дужки у циклу. Вони там просто не потрібні, оскільки всередині циклу всього лише один оператор. В результаті, код вийшов таким:

lt ;?php
$ array
= range(0,99999) -
$ result
=0-
$ count
= count($ array) -
for($ i =0- $ i lt; $ count- $ i++) $ result += round($ array[$ i]* sqrt($ i)) -
echo $ result
-
?gt;

Можна було ще, звичайно, взагалі обійтися без масиву, а в циклі підставляти замість $ Array [$ i], просто $ i, але припустимо, що за умовами завдання нам потрібно було створити масив. Все, рефакторинг ми завершили і давайте підведемо підсумок. Продуктивність скрипта збільшилася майже в 2 рази, кількість рядків зменшилася в 1.5 рази. Як бачите, навіть в такому, здавалося б, простому скрипті, ми примудрилися так сильно все поліпшити. А вже про ті ж двигуни, я взагалі мовчу, там можна вічно проводити рефакторинг.

Поділися в соціальних мережах:

Схожі
Створення динамічної функції на phpСтворення динамічної функції на php
Застосування curlЗастосування curl
Створення графіків на phpСтворення графіків на php
Сортування двовимірного масиву на phpСортування двовимірного масиву на php
Цикли в phpЦикли в php
Як прописати суму, число, цифри прописом в excelЯк прописати суму, число, цифри прописом в excel
Що нового в php7.1: поліпшення обробки $ this.Що нового в php7.1: поліпшення обробки $ this.
Рекурсія в phpРекурсія в php
Довідкові змінні phpДовідкові змінні php
Парсинг bb-кодівПарсинг bb-кодів
» » Як проводити рефакторинг?