Я был в шоке, когда понял, от чего возник баг

Иногда баги могут возникать на пустом месте. Я даю совет, как можно избежать ряда неожиданного и неправильно поведения в программе.

Непонятный код

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

Двойные отрицания в коде

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

Понять, в какую ветку условия пойдёт исполнения сложно из-за получившегося двойного отрицания, и человек, который писал код напутал с тем, что надо исполнять в каком случае. Проблема двойного отрицания в том, что реально сложно разобраться, что именно должно произойти, чтобы условие сработало. Всегда следует избегать этого, как в названиях переменных, так и в названия методов. Лучше написать так и расставить логику в блоках соответствующим образом:

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

 

Полезные ссылки о доступности (accessibility)

Ссылка на полезные тексты, которые помогут сделать ваш сайт более доступным для всех интерфейсов.

stencil.blog-post-feature (3)

Хороший обзор того, как можно повысить доступность сайтов, включая чеклисты: https://teachaccess.github.io/tutorial/

Ещё один сайт с полезными постами про доступность:
http://a11yproject.com/

Черновик стандарта HTML:
https://www.w3.org/TR/aria-in-html/

Проверка React компонентов на доступность:
https://github.com/reactjs/react-a11y

ГОСТ Р 52872-2012 Интернет-ресурсы. Требования доступности для инвалидов по зрению:
http://docs.cntd.ru/document/1200103663

Приказ Минкомсвязи от 11.03.2016 на тему доступности:
http://www.minsvyaz.ru/ru/documents/4930/