Pull to refresh

Еще один шаг к автоматической инспекции кода: легкая оптимизация “на лету”

Доброго времени суток. В продолжение цикла статей об автоматической инспекции кода хотелось бы написать о еще одной новой фичи в проекте SevnuCheckstyle которую разработал я. Если считаете данную тему интересной для себя — приглашаю продолжить чтение статьи.




Об автоматической инспекции кода на ресурсе уже было несколько статей: вот тут, тут,и тут предыдущие статьи разработчиков нашего проекта. Как можно догадаться — речь пойдет о системе checkstyle и написании чеков (проверок), которые можно с её помощью произвести.

Вернемся к теме статьи: немного об оптимизации.
Речь пойдет о таком моменте в оптимизации, как порядок следования операндов в логическом выражении. Конечно это не ускорит работу Вашего приложения в десятки раз, однако немного времени это сэкономит.
Если кто-то не понял о чем идет речь — (немного теории) при использовании операторов && и || результат всего выражения может быть получен при неполном его просмотре, то есть в самом благоприятном случае Вам хватит первого операнда. Смысл данной простейшей оптимизации в том, что вызов метода наверняка более тяжеловесен, нежели проверка значения локальной логической переменной, или поля.

Пример:
if(isReady && isSelected()){}
if(isValid() && !isBusy){} //you’ll get warning here
if(hasError() && isReady || isReady && isSpecialMode()){} //you’ll get warning here

Одна из проверок, написанных мной как раз решает подобную проблему: LogicConditionNeedOptimization — уведомляет Вас о том, что возможно оптимизировать написанное Вами логическое выражение, переместив вызовы метода после проверки всех локальных переменных или полей, присутствующих в выражении. Конечно возможны случаи, когда предупреждение будет выведено напрасно. Например если метод, вызываемый в выражении, каким-то образом влияет на значение используемой в том же выражении переменной, однако это скорее всего будет свидетельствовать об ошибочном дизайне.
Данная оптимизация очевидна, однако многие не обращают внимания на подобные мелочи. С помощью автоматической инспекции Вы можете обратить внимание Вашей команды (да и не бояться, что своя память подведет) на подобные огрехи. Вы получите достаточно большой объем уже реализованных проверок и возможность без особого труда реализовать проверки, необходимые Вашей команде и лично Вам.

В заключение хотелось бы перечислить выгоды от практики в проекте sevntu.checkstyle которые получил я:

— Я являюсь автором моего кода, моё имя в javadoc.
— Проект простой, отличный старт для начинающих.
— Понимание и практика VCS (git).
— Опыт работы в команде, несколько студентов делают изменения в одно время.
— Всё это я могу делать в удобное для меня время не мешая учебе и личной жизни.
— Работу с куратором проекта.
— Code-review и ответы на вопросы “почему надо именно так?” в skype/mail.
— UTesting (100% покрытие кода тестами) и ручное тестирование на реальных проектах (Spring, Hibernate, ...).
— Изменение wiki страничек проекта для помощи новым членам команды.
— Получение опыта вклада в проект.
— Работа с issue tracking system (SourceForge, GitHub).
— Работа полностью осуществляется под Linux (Ubuntu). Куратор, при необходимости, помогает с возникшими при миграции с Windows вопросами. Дополнительно возможны советы по использованию Eclipse.
— Теперь у меня есть что приложить к моему резюме(CV). Я не боюсь показать мой код для оценки стиля написания и моего опыта.
— Я начинал с начального уровня знаний Java, руководитель проекта помог мне сфокусироваться на нужных книгах, статьях. Я могу задавать вопросы на интересующие меня темы. Также руководитель может задавать интересные вопросы, чтобы копнуть глубже.
— Мой код не применяют к общему репозиторию, пока руководитель видит его неидеальным — всё просто.
— Во время автоматизации я запомнил на всю жизнь (как на доске в 3-м классе прописать одно предложение много много раз) как не надо писать код, но теперь я помогу себе, как и другим людям не делать ошибки. Надеюсь эта работа не пропадет зря.
— Я могу использовать свои наработки в других проектах — код открыт.
— Моя работа используется дальше, а следовательно время потрачено не зря.
— Надеюсь я могу гордиться моим кодом.
— Надеюсь, что это поможет мне легче пройти собеседование в хорошие компании, так как я узнаю много нюансы Java (вопросы по которым могут быть заданы на собеседовании любому разработчику).
— Работа с утилитой статического анализа кода поможет мне избежать “Хорошо известных” проблем, знания о которых я мог бы получить за 3-5 лет опыта.
— В моем случае стало возможным работать на проекте во время летней практики университета в офисе с разработчиками компании Reveredata. Это увеличивало скорость решения проблем и ответов на вопросы.

В заключение хотелось бы сказать, что Open Source — это круто. Он помог мне в повышении моего уровня знаний и умений. Не бойтесь участвовать и помогать развиваться проектам. Хватит сомневаться и стесняться — выбери проект и сделай что то полезное!
Если кого-то заинтересовал наш проект — sevntu-Checkstyle.github.com/sevntu.Checkstyle. Отсутствие у вас опыта — не проблема, вашего желания должно хватить. Даже маленький модуль будет очень полезен — ваша помощь нужна.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.