<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

В начале курса у нас будет только идея, а в конце готовый продукт, который можно использовать в практических целях.

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

В предыдущей статье мы с Вами разобрали что такое рефакторинг. А в этой статье мы разберём пример рефакторинга конкретного работающего кода. После прочтения этой статьи Вы узнаете, как проводить рефакторинг.

Предположим, у нас есть такой PHP-код:

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

Это правильно работающий код, однако, он далеко не идеален. Наша с Вами задача увеличить быстродействие и уменьшить количество кода. Что касается стилистики, то тут проблем никаких нет: всё понятно и всё прекрасно читается.

Начнём с быстродействия. Я уже писал, как узнать время выполнения скрипта, поэтому повторяться не буду.

Итак, замерив время работы данного скрипта у меня получилось примерно 0.30 секунды. Первое, что можно сразу исправить - это создание массива. Дело в том, что в PHP есть очень простая функция range(), которая делает всё ровно так же, что и у нас, только быстрее:

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

Время выполнения уже 0.24 секунды, неплохо выиграли, плюс количество кода резко сократилось.

Теперь разберём очень популярный вид дублирования, а именно в указании условия выхода из цикла. В данном коде мы в каждой итерации вычисляем длину массива. Но зачем? Ведь она постоянная и никак не меняется. Эту "ошибку" допускают практически все профессионалы, в том числе, и я. В основном, просто по привычке, потому что так пишут все. И стоит отметить, если массив не очень большой, то с точки зрения читабельности так и стоит оставить, но когда массив огромный, то надо писать так:

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

Время выполнения уже 0.17 секунды, а это уже большой выигрыш во времени.

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

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

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (1):

malina95 malina95 05.04.2013 13:50:59

Спасибо, статья полезная. А про $count = count($array); я знал давно, и уже вошло в привычку так делать.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.