можно ли использовать if без else

Программное обеспечение без конструкции if-else

Jul 19, 2020 · 5 min read

Не откладывая в долгий ящик скажу: зачастую конструкция if-else — плохой выбор. Её использование приводит к сложным конструкциям, снижает читаемость кода и усложняет рефакторинг.

Тем не менее, конструкция if-else де-факто стала решением для ветвления кода, что имеет смысл. Это одна из первых тем, которую изучают начинающие разработчики. К несчастью, многие так никогда и не переходят на более подходящие стратегии ветвления.

Некоторые живут по правилу: if-else молоток, всё остальное — гвозди.

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

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

1. Совсем лишние блоки else

Это с а мая распространённая ошибка начинающих разработчиков. Ниже яркий пример того, как вы проигрываете, используя if-else:

Выражение легко упростить, просто убрав блок else :

Источник

Нужно ли писать else в каждом условии if?

11 ответов

Это ужасная идея. В итоге вы получите код формы:

Теперь вы можете поместить основную работу метода в предложение else, но это приведет к ненужному увеличению вложенности. Добавьте еще несколько условий, и все станет нечитаемым беспорядком.

Теперь есть одна ситуация, когда есть больше возможностей для обсуждения, и здесь обе ветки являются терминальными, но ни одна из них не является эффективным ярлыком:

Опасность! Опасно, Уилл Робинсон!

Может ли включение пустых блоков else < >как-то улучшить качество, читаемость или надежность вашего кода? Думаю, нет.

Если машину не остановить до того, как я доберусь до стены, я разобьюсь, иначе я не разобьюсь.

Семантика в сторону:

Ответ на этот вопрос зависит от окружающей среды и от результата ошибки.

Бизнес-код? Делайте то, что говорят ваши стандарты кодирования.
ИМХО вы обнаружите, что его разъяснение, хотя сначала кажется, что это слишком много работы, станет бесценным через 10 лет, когда вы вернетесь к этому коду. Но, конечно, это не будет концом света, если вы пропустите важное «антиусловие».

Читайте также:  левая сторона шеи болит при повороте головы что делать

Однако: код безопасности, безопасности или жизненно важный? Это совсем другая история.

Найдите Therac-25. 8 тяжело ранены. 3 мертвых.

Я знаю, что опаздываю, но я много думал над этим и хотел поделиться своими результатами.

В критическом коде обязательно нужно учитывать каждую ветвь. Писать else не обязательно, но оставьте отметку о том, что else не требуется и почему. В этом поможет рецензент. Наблюдать:

Вместо того чтобы писать

Большинство разработчиков предпочитают:

Это чисто вопрос стиля и ясности. Легко представить операторы if, особенно простые, для которых else будет совершенно излишним. Но когда у вас есть более сложное условное выражение, возможно, обрабатывающее несколько различных случаев, часто может быть полезным явное заявление о том, что в противном случае ничего делать не следует. В этих случаях я бы оставил комментарий // do nothing в пустом поле else, чтобы было ясно, что пространство намеренно оставлено пустым.

Нет, но я лично предпочитаю всегда включать в себя инкапсулирующие скобки, чтобы избежать

Источник

Использование оператора if без ветки else

Логические операторы и выражения

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

В качестве проверяемого выражения оператор if ожидает выражение, значение которого равно true или false. Такие выражения называются логическими. Внутри логических выражений могут быть другие выражения, но последняя операция (операция с наименьшим приоритетом) должна возвращать значение логического типа bool. Рассмотрим условие, которое присутствует в программе, проверяющей число на кратность 3:

if (number%3 == 0) <

bool isMultiply3 = number%3==0;

Здесь результат сравнения number%3==0 присваивается переменной isMultiply3. Согласно приоритету вначале выполняется операция %, затем производится сравнение ==, дающее true или false, и последним происходит присваивание =.

Читайте также:  Что нужно чтоб открыть карту сбербанка

В следующей таблице приведены операции сравнения.

В следующей таблице перечислены логические операции:

Источник

Условное ветвление: if, ‘?’

Иногда нам нужно выполнить различные действия в зависимости от условий.

Инструкция «if»

В примере выше, условие – это простая проверка на равенство ( year == 2015 ), но оно может быть и гораздо более сложным.

Если мы хотим выполнить более одной инструкции, то нужно заключить блок кода в фигурные скобки:

Преобразование к логическому типу

Инструкция if (…) вычисляет выражение в скобках и преобразует результат к логическому типу.

Давайте вспомним правила преобразования типов из главы Преобразование типов:

Таким образом, код при таком условии никогда не выполнится:

…а при таком – выполнится всегда:

Блок «else»

Инструкция if может содержать необязательный блок «else» («иначе»). Он выполняется, когда условие ложно.

Несколько условий: «else if»

Блоков else if может быть и больше. Присутствие блока else не является обязательным.

Условный оператор „?“

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

Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.

Этот пример будет делать то же самое, что и предыдущий:

Но скобки делают код более читабельным, поэтому мы рекомендуем их использовать.

Несколько операторов „?“

Поначалу может быть сложно понять, что происходит. Но при ближайшем рассмотрении мы видим, что это обычная последовательная проверка:

Вот как это выглядит при использовании if..else :

Нетрадиционное использование „?“

Здесь мы не присваиваем результат переменной. Вместо этого мы выполняем различный код в зависимости от условия.

Не рекомендуется использовать оператор вопросительного знака таким образом.

Вот, для сравнения, тот же код, использующий if :

При чтении глаза сканируют код по вертикали. Блоки кода, занимающие несколько строк, воспринимаются гораздо легче, чем длинный горизонтальный набор инструкций.

Источник

Урок №64. Операторы условного ветвления if/else

Обновл. 13 Сен 2021 |

Читайте также:  можно ли крабовые палочки при грудном вскармливании в 2 месяца

На этом уроке мы рассмотрим операторы условного ветвления if/else, а также то, как их можно использовать.

Условные ветвления if/else

Самыми простыми условными ветвлениями в языке С++ являются стейтменты if/else. Они выглядят следующим образом:

if (выражение)
стейтмент1

if (выражение)
стейтмент1
else
стейтмент2

Использование нескольких операций в ветвлениях if/else

Оператор if выполняет только одну операцию, если выражение является true, и также только одну операцию else, если выражение — false. Чтобы выполнить несколько операций подряд, используйте блок стейтментов:

Неявное указание блоков

Если программист не указал скобки для блока стейтментов if или else, то компилятор неявно сделает это за него. Таким образом, следующее:

if (выражение)
стейтмент1
else
стейтмент2

Будет выполняться как:

if (выражение)
<
стейтмент1
>
else
<
стейтмент2
>

По сути, это не имеет значения. Однако начинающие программисты иногда пытаются сделать что-то вроде следующего:

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

В этом контексте становится понятным, что переменная a имеет локальную область видимости и уничтожается в конце блока, в котором выполняется её инициализация. И, когда мы дойдем до строчки с std::cout, переменная a уже перестанет существовать.

Связывание стейтментов if

Стейтменты if/else можно использовать в связке:

Вложенные ветвления if/else

Одни стейтменты if могут быть вложены в другие стейтменты if:

Обратите внимание, в программе, приведенной выше, мы можем наблюдать потенциальную ошибку двусмысленности оператора else. К какому if относится оператор else: к внешнему или к внутреннему?

Дело в том, что оператор else всегда относится к последнему незакрытому оператору if в блоке, в котором находится сам else. Т.е. в программе, приведенной выше, else относится к внутреннему if.

Чтобы избежать таких вот неоднозначностей при вложенности операторов условного ветвления, рекомендуется использовать блоки стейтментов (указывать скобки). Например, вот та же программа, приведенная выше, но уже без двусмысленности:

Источник

Строй-портал