powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / маненькый вопросик про вычисления логических выражений
11 сообщений из 36, страница 2 из 2
маненькый вопросик про вычисления логических выражений
    #36841209
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Дело в том, что описание логических операторов, которое вы привели, никаким боком не относится к вопросу "Как VB обрабатывает логические условия, все ли их части выполняет, или же прекращает на полпути если на этом полпути конечный ответ становится очевидным?"
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842065
Тёмa i ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там конечно идет анализ, что возвращает msgbox
If len("строка")<>0 AND msgbox("тра-ля-ля")= число then
но сути это не меняет. это даже не избыточно, это противоречит математической логике и сбивает с толку, так уверен, что если получил вывод msgbox, то строка len("строка")<>0.
по крайней мере, не припомню такой экзотики в других языках.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842070
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оригинале было len("строка"), а не len(строка)
т.е. "строка" это константа и её длина равна 6 и оно не равно 0.
Следовательно первое условие выполняется в любом случае.
А там где msgbox, там результат зависит от того, какую кнопку нажал юзер в ответ на всплывшее сообщение.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842075
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тёмa i koэто противоречит математической логике и сбивает с толку

меня будет сбивать с толку периодическое НЕвыполнение функции в выражении, потому что функция может выполнять какие-то действия, которые обязательно должны быть выполнены. А если хочется оптимизации - вложенный иф.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842079
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub test()
If 1 = 2 And MsgBox("избыточные вычисления") Then
End If
End Sub

В отличии от Си визуал бейсик проводит все вычисления, даже если они избыточны результат уже известен, как в данном примере.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842087
Тёмa i ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon PlayerВ оригинале было len("строка"), а не len(строка)
т.е. "строка" это константа и её длина равна 6 и оно не равно 0.
Следовательно первое условие выполняется в любом случае.
А там где msgbox, там результат зависит от того, какую кнопку нажал юзер в ответ на всплывшее сообщение.

каюсь - некорректно написал
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842165
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тёмa i koтам конечно идет анализ, что возвращает msgbox
If len("строка")<>0 AND msgbox("тра-ля-ля")= число then
но сути это не меняет. это даже не избыточно, это противоречит математической логике и сбивает с толку, так уверен, что если получил вывод msgbox, то строка len("строка")<>0.
по крайней мере, не припомню такой экзотики в других языках.Математической логике это не противоречит.
И вообще, прими как данность - Бейсик вычисляет все элементы логического выражения прежде чем делать над ними логические операции.
Отлито из бронзы, руками не трогать. Как с логическими выражениями работают другие языки - совершенно не важно.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842166
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proменя будет сбивать с толку периодическое НЕвыполнение функции в выражении, потому что функция может выполнять какие-то действия, которые обязательно должны быть выполнены. А если хочется оптимизации - вложенный иф.Угадай, что произойдет вот тут и в каком случае будет выполнятся f2():
Код: plaintext
1.
2.
3.
4.
int x = ....
if (int a=f1(x), a && f1(a+ 1 ) ) f2(a);
...
int f1(int i) { return i& 1 ;}
Код конечно дурацкий, и ТАК никогда не делают, но в принципе, это совершенно легальный синтаксис.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842317
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТёмa i koэто противоречит математической логике и сбивает с толку

меня будет сбивать с толку периодическое НЕвыполнение функции в выражении, потому что функция может выполнять какие-то действия, которые обязательно должны быть выполнены. А если хочется оптимизации - вложенный иф.
Справедливости ради следует отметить, что раз уж мы для гарантии невыполнения лишнего делим на два ифа, то и для гарантии выполнения по той же логике будем выполнять не в условии, а вынесем до него ;)
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842603
Тёмa i ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотел ещё спросить, а есть ли в VBA ещё такие "подводные камни"?
если можно, без эмоций, пожалуйста.
...
Рейтинг: 0 / 0
маненькый вопросик про вычисления логических выражений
    #36842624
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тёмa i koхотел ещё спросить, а есть ли в VBA ещё такие "подводные камни"?
если можно, без эмоций, пожалуйста.
Мы тут как раз эмоционально обсуждаем, считать это подводным камне или нет...

Что значит "такие"? Непривычные с точки зрения другого языка? Кому-то и выражение
a = b = с покажется дикостью....
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / маненькый вопросик про вычисления логических выражений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]