M>Тем, что чаще является опечаткой, чем действительно намеренным кодом программиста.
Эээ... А каким образом можно так опечататься? В смысле вместо == поставить =? Ну так у тебя это не скомпилируется. Тебе придется все выражение еще в скобочки дополнительные взять — опять-таки и после этого оно не скомпилируется. Надо будет сравнить с чем-нибудь.
В общем что-то мне кажется, что сложновато так опечататься.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, mkizub, Вы писали:
ВВ>>>
M>>if ((x = MyFunc()) > 4 && x % 2 == 0)
M>>
M>>Тем, что чаще является опечаткой, чем действительно намеренным кодом программиста.
ВВ>Эээ... А каким образом можно так опечататься? В смысле вместо == поставить =? Ну так у тебя это не скомпилируется. Тебе придется все выражение еще в скобочки дополнительные взять — опять-таки и после этого оно не скомпилируется. Надо будет сравнить с чем-нибудь.
А если x имеет логический тип?
ВВ>В общем что-то мне кажется, что сложновато так опечататься.
Я, например, неоднократно опечатывался так в С\С++.
Помимо сказанного про ошибки. Зачем всё лепить в кучу: вычисление предиката и действия? Какой смысл специально вводить в язык конструкции, предназначенные для создания предикатов с сайд-эффектами? Какой вообще смысл в предикатах с сайд-эффектами? Чтобы отлаживать было веселее?
Здравствуйте, prVovik, Вы писали:
V>Помимо сказанного про ошибки. Зачем всё лепить в кучу: вычисление предиката и действия? Какой смысл специально вводить в язык конструкции, предназначенные для создания предикатов с сайд-эффектами? Какой вообще смысл в предикатах с сайд-эффектами? Чтобы отлаживать было веселее?
Так в чем сайд-эффекты? Только в том, что похоже на опечатку?
Здравствуйте, IT, Вы писали:
IT>Зачем вводить новые локальные переменные выше, если их scope ограничен только условием?
Локальные переменные нужны для наглядности кода. Не знаю как обстоят дела с компилятором С#, а современные С++ компиляторы очень многие локальные переменные (особенно в циклах) не создают — помещают значения сразу в регистр. Т.е. и наглядность сохраняется, и лишних сущностей фактически не создаётся.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Так в чем сайд-эффекты? Только в том, что похоже на опечатку?
Сайд эффект в том, что после проверки условия у нас изменится переменная х. А согласно здравому смыслу, а также ожиданиям того, кто будет читать код, проверка условия не должна вообще ничего менять, она лишь проверяет истинность некоторого утверждения.
писалось не для того, чтобы бороться как раз с теми самыми "опечатками"?
Мне просто интересно понять — есть ли какие-нибудь реальные проблемы у инлайн ассаинмента или это все, что называется, религия. Я вот проблем не замечал и во многих случах он просто напросто удобен.
Точно также как удобнее писать:
Здравствуйте, prVovik, Вы писали:
V>Сайд эффект в том, что после проверки условия у нас изменится переменная х. А согласно здравому смыслу, а также ожиданиям того, кто будет читать код, проверка условия не должна вообще ничего менять, она лишь проверяет истинность некоторого утверждения.
Переменная x — "состояние" проверки, которое мы анализируем. Потому она меняется. Семантически
GetValue() != 3
и
(x = GetValue()) != 3
полностью аналогичны. Во втором случае я лишь "запоминаю" результат операции, для дальнейших с ним действий. Где здесь нарушение здравого смысла?