Неконсистентность
Анти-паттерн
Оформляя свой код или текст, следует придерживаться единых правил, чтобы не создавать лишних вопросов у читателя. Выбор правил оформления может быть гибким, но следовать им нужно твёрдо, иначе внимание невольно будет спотыкаться о то, как в схожих ситуациях вылезают разные способы решения.
Пример 1¶
Всегда обращайте внимание на закрывающие запятые и скобки.
Плохо:
if not advance_amount and not advance_percent:
raise ValidationError(
'Введены некорректные значения для полей '
'"Размер аванса в процентах" и "Размер аванса, руб.". '
'Сбросить оба значения поля можно убрав галочку с поля "Авансирование".')
elif advance_amount > initial_contract_price:
raise ValidationError(
'Значение поля "Размер аванса, руб." не может быть больше'
'значения поля "Начальная (максимальная) цена контракта, руб."',
)
Хорошо:
if not advance_amount and not advance_percent:
raise ValidationError(
'Введены некорректные значения для полей '
'"Размер аванса в процентах" и "Размер аванса, руб.". '
'Сбросить оба значения поля можно убрав галочку с поля "Авансирование".'
)
elif advance_amount > initial_contract_price:
raise ValidationError(
'Значение поля "Размер аванса, руб." не может быть больше'
'значения поля "Начальная (максимальная) цена контракта, руб."'
)
Пример 2¶
Всегда обращайте внимание на закрывающие запятые и скобки.
Плохо:
if set_is_advance(is_advance, cleaned_data):
return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
set_advance_if_advance_percent_change(
initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data
)
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
set_advance_if_advance_amount_change(
initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data)
Хорошо:
if set_is_advance(is_advance, cleaned_data):
return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
set_advance_if_advance_percent_change(
initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data,
)
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
set_advance_if_advance_amount_change(
initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data,
)
Хорошо:
if set_is_advance(is_advance, cleaned_data):
return cleaned_data
elif 'advance_percent' in self.changed_data and 'advance_amount' not in self.changed_data:
set_advance_if_advance_percent_change(
initial_advance_percent, advance_amount, advance_percent, initial_contract_price, cleaned_data)
elif 'advance_amount' in self.changed_data and 'advance_percent' not in self.changed_data:
set_advance_if_advance_amount_change(
initial_advance_amount, advance_amount, advance_percent, initial_contract_price, cleaned_data)
Пример 3¶
Если принято решение разносить аргументы или элементы коллекции по строкам, каждый из элементов должен быть оформлен по единым правилам.
Плохо:
@pytest.mark.parametrize('input_data, expected', [
((True, True, 13, 500, 1000), (13, 130)),
((True, True, None, 500, 1000), (None, None)),
((True, True, 13, None, 1000), (13, 130)),
])
Хорошо:
@pytest.mark.parametrize(
'input_data, expected',
[
((True, True, 13, 500, 1000), (13, 130)),
((True, True, None, 500, 1000), (None, None)),
((True, True, 13, None, 1000), (13, 130)),
],
)