На многих языках задания легальны в условиях. Я так и не понял причину этого. Зачем писать:
if (var1 = var2) {
...
}
вместо:
var1 = var2;
if (var1) {
...
}
На многих языках задания легальны в условиях. Я так и не понял причину этого. Зачем писать:
if (var1 = var2) {
...
}
вместо:
var1 = var2;
if (var1) {
...
}
Ответы:
Это более полезно для циклов, чем для операторов if.
Что в противном случае пришлось бы написать
источник
Я считаю его наиболее полезным в цепочках действий, которые часто включают обнаружение ошибок и т. Д.
Альтернатива (без использования присваивания в условии):
При длительной проверке ошибок альтернатива может запускаться с правой стороны страницы, тогда как версия с назначением в условиях этого не делает.
Проверки ошибок может быть также «действия» -
first_action()
,second_action()
,third_action()
- конечно, а не только чеки. То есть это могут быть проверенные шаги в процессе, которым управляет функция. (Чаще всего в коде, с которым я работаю, функции соответствуют строкам проверок предварительных условий или выделению памяти, необходимому для работы функции, или аналогичным строкам).источник
Это более полезно, если вы вызываете функцию:
Конечно, вы можете просто поставить n = foo (); в отдельном заявлении тогда if (n), но я думаю, что приведенная выше идиома довольно читабельна.
источник
Это может быть полезно, если вы вызываете функцию, которая возвращает либо данные для работы, либо флаг, указывающий на ошибку (или на то, что все готово).
Что-то вроде:
Лично мне эта идиома не очень нравится, но иногда альтернатива бывает уродливее.
источник
GCC может помочь вам обнаружить (с -Wall), если вы непреднамеренно попытаетесь использовать присвоение в качестве значения истины, в случае, если он рекомендует вам написать
Т.е. используйте дополнительные скобки, чтобы указать, что это действительно то, что вы хотите.
источник
Идиома более полезна, когда вы пишете
while
цикл вместоif
оператора. Что касаетсяif
утверждения, вы можете разбить его, как вы описываете. Но без этой конструкции вам либо пришлось бы повторяться:или используйте структуру из полутора петель:
Я обычно предпочитаю форму в виде полуторных петель.
источник
while
петли предпочтительнее использовать:do { c = getchar(); ... } while (c != EOF);
for
вместоfor (char c = getchar(); c != EOF; c= getchar()) { /* do something with c */ }
этого можно использовать петли: - это самый краткий, иfor
стилистически он всегда говорит мне «петля». Небольшой недостаток в том, что вам нужно указать функцию, возвращающуюсяc
дважды.Короткий ответ заключается в том, что языки программирования, ориентированные на выражения, допускают более сжатый код. Они не заставляют вас отделять команды от запросов .
источник
В PHP, например, это полезно для просмотра результатов базы данных SQL:
Это выглядит намного лучше, чем:
источник
Другое преимущество возникает при использовании gdb. В следующем коде код ошибки неизвестен, если мы выполняем пошаговое выполнение.
Скорее
Теперь во время одного шага мы можем узнать код ошибки возврата из checkstatus ().
источник
Я считаю это очень полезным с функциями, возвращающими необязательные параметры (
boost::optional
илиstd::optional
в C ++ 17):Это уменьшает объем моей переменной, делает код более компактным и не мешает читабельности (я считаю).
То же самое с указателями:
источник
Причина:
Улучшение производительности (иногда)
Меньше кода (всегда)
Возьмем пример: существует метод,
someMethod()
и вif
условии, что вы хотите проверить, равно ли возвращаемое значение методаnull
. Если нет, вы собираетесь снова использовать возвращаемое значение.Это снизит производительность, поскольку вы дважды вызываете один и тот же метод. Вместо этого используйте:
источник