Террийный Что?
Террические операторы, также известные как Условные выражения В Python можно использовать, чтобы сделать наш код короче:
Но я не люблю их по двум причинам:
1. Они часто ходят против дзен Питона
Если вы не знаете Дзэн Питона Начните интерпретатор Python и введите Импортировать это
Отказ Zen – это набор руководящих принципов для написания кода Python.
Возможно, большая часть времени условных выражений, вероятно, сломается 3 из этих принципов:
- Красивая лучше, чем уродливая.
- E.G.:
«Странно», если N% 2 иначе «даже»
что-нибудь, но красиво
- E.G.:
- Резет лучше, чем плотный.
- E.G.:
«Странно», если N% 2 иначе «даже»
более плотный, чем утверждение, если/else
- E.G.:
- Количество читаемости.
- E.G.:
«Странно», если N% 2 иначе «даже»
не так читабелен как оператор IF/ELSE
- E.G.:
И, что более важно …
2. Они часто обманывают наше тестовое покрытие
Условные выражения могут заставить нас думать, что мы охватывали все возможные ветви с тестами, когда у нас на самом деле нет. Проверьте следующий пример:
Если я запускаю тесты с Охват это выход:
Согласно изображению, я покрыл 100% линий, не пропустив никакой ветви. Но снова ищете в коде, мы видим, что нет теста на месяцы второго семестра года.
Если я использую Classic If Stake вместо этого, отсутствие покрытия будет правильно обнаружено:
Если я запускаю покрытие, экспортирую результаты к HTML, я могу на самом деле мог видеть, какое утверждение было пропущено, и какое ветвь была частично запускается во время теста:
Теперь я знаю, что я должен написать тест, который звонит Семестр
С ценностью более 6, если я хочу, чтобы функция была на 100% покрыта.
Вывод
Это причины, по которым я избегаю условных выражений и советую людям также избегать их: они, как правило, нарушают дзен Питона, и они могут обмануть наш код покрытия.
Уважаемый, а не каждый кусок кода, не должен быть на 100%, охватываемых тестами, но те, которые должны быть измеримыми наилучшими возможными, и мы только что видели, что условные выражения могут попасть на нашем пути, когда мы преследуем это Отказ
Оригинал: “https://dev.to/victorosilva/my-case-against-the-ternary-operator-in-python-3068”