Comments 23
Дело в том, что в Си для операции || требуется согласование типов. Вот так уже не напишешь.
PHP я знаю плохо, но это требование, как я понимаю, намеренно ослаблено.
(in = fopen("file", "r")) || return 1;
PHP я знаю плохо, но это требование, как я понимаю, намеренно ослаблено.
+3
Сплошь и рядом, мало вы кода видели. Просто типизация строгая и всё такое, и принципы другие.
+2
в perl такие конструкции очень распространены, например
my $var = do_something() or die;
за счет того, что оператор or имеет более низкий приоритет, чем присваивание, выглядит очень естественно и локанично :)
Оператор || обычно используют иначе:
my $var = $a || $b;
его приоритет выше присваивания
my $var = do_something() or die;
за счет того, что оператор or имеет более низкий приоритет, чем присваивание, выглядит очень естественно и локанично :)
Оператор || обычно используют иначе:
my $var = $a || $b;
его приоритет выше присваивания
+1
Короткое вычисление логических выражений не входит в стандарт и может не поддерживаться компилятором. Поэтому так писать не рекомендуется.
-6
потому что использование if намного нагляднее
и вообще надо писать так:
FILE *f = fopen(«file», «r»);
if (f == NULL) {...}
и не экономить на строчках
и вообще надо писать так:
FILE *f = fopen(«file», «r»);
if (f == NULL) {...}
и не экономить на строчках
0
А дело далеко не в наглядности, это не превалирующий фактор. Нормальный специалист такие конструкици разбирает легко и просто. Мне, например, конструкция
if (f == NULL)
режет глаза, намного привычнее и понятнее
if (!f)
и таких нюансов много. Кто начинал давно, того выкрутасами не удивишь. А на современных недопроггеров жалко смотреть. Всё им не так, всё им разжуй, только и слышно, что везде неправильно, везде убого, а сами даже двух строчек банальных разобрать не могут.
if (f == NULL)
режет глаза, намного привычнее и понятнее
if (!f)
и таких нюансов много. Кто начинал давно, того выкрутасами не удивишь. А на современных недопроггеров жалко смотреть. Всё им не так, всё им разжуй, только и слышно, что везде неправильно, везде убого, а сами даже двух строчек банальных разобрать не могут.
+4
я ошибаюсь, или это называется неполной компиляцией выражений? Если так, то всё время считал, что она есть только в интерпретируемых языках. В том же PHP она используется очень часто, хотя и является временами причиной трудноотловимых багов.
-3
помоему это особенно никак не называется, по крайней мере ни в стандарте, ни в википедии я названия не нашел. и это есть и в Си и в его наследниках.
0
Это называется en.wikipedia.org/wiki/Short-circuit_evaluation
+2
Да когда времени или ума не хватало использовать smart\checked указатели(или когда их еще даже не изобрели) «smth or die» это все что спасало программу от креша)
extern void *p; //defined somewhere else
if (p && blah-blah...)
extern void *p; //defined somewhere else
if (p && blah-blah...)
+1
# [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo «Жив»
-3
Если подобный оператор будет перегружен, то неполное вычисление не будет производиться. Вы будете долго искать ошибку :)
0
Sign up to leave a comment.
Об операторах