TGTGInsightаналитика telegramLIVE / telegram public index
← Программирование для гуманитариев
Программирование для гуманитариев avatar

TGINSIGHT POST

Post #340

@it_human

Программирование для гуманитариев

Просмотры2,750Количество просмотров
Опубликован8 дек.08.12.2020, 16:00
Содержимое поста

Содержимое

#плохойкод Сложные булевы выражения Сегодня в рубрике про плохой код рассмотрим вот такие булевы выражения: // си-подобный синтаксис if (person.age > 27 || person.age < 18 && month >= 9 && month != 12 && money > 0) # Python if (person_age > 27 or person_age < 18 and month >= 9 and month != 12 and money > 0) В коде иной раз встречаются образцы ещё длиннее и сложнее этого вымышленного примера. Недостатков в подобном коде как минимум 2: 1. У операторов И и ИЛИ (как и у всех остальных) - есть приоритет - то есть, порядок, в котором они будут выполняться. И он может оказаться не таким, как вы ожидаете (погуглите «таблица приоритетов операций» для вашего языка). Поэтому если уж мудрите с длинными вычилениями, лучше заключайте выражения в скобки, чтобы однозначно определить порядок выполнения операций. 2. Сложно, запутанно, нечитаемо. Это значит, что а) вы с высокой вероятностью сами уже запутались, пока писали этот код, и в нём уже есть баги и ошибки. и б) его сложно прочитать другому человеку. Вы же помните, что код должен быть понятным? А чтобы переписать такое выражение, можно создать несколько (булевых) переменных с понятными именами и записать в них результат промежуточных вычислений: is_person_young_adult = person_age > 18 and person_age < 27 is_autumn = month >= 9 and month < 12 person_has_money = money > 0 И теперь используем в исходном выражении эти переменные: if (person_has_money and (not is_person_young_adult) and is_autumn) Видите, насколько более понятным стал код по сравнению с примером вверху поста? А всего-то - несколько новых переменных ввели. Теперь из кода видно, что, если у клиента на счету есть деньги, и он не входит в возрастную группу «молодой взрослый» и сейчас осень - что-то должно произойти (например, ему можно показать на сайте баннер с какими-нибудь скидками). И да, вы верно заметили - в примере есть магические числа, это для упрощения понимания. А в настоящем коде их по возможности нужно избегать, как мы помним.