powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
11 сообщений из 11, страница 1 из 1
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371593
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsNull(kod_cexa) выдаёт ИСТИНА
Код: plaintext
If IsNull(kod_cexa) Or Val(kod_cex) =  0  Then
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371720
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как он должен себя вести при операторе "или" ?
вот если стоит оператор "и", тогда при не выполнении первого условия, он во второе и не заглядывает.
Код: plaintext
1.
2.
3.
4.
kod_cexa = Null
If IsNull(kod_cexa) Or Val(kod_cex) =  0  Then MsgBox IsNull(kod_cexa) ' = true
kod_cexa =  0 
If IsNull(kod_cexa) Or Val(kod_cex) =  0  Then MsgBox IsNull(kod_cexa) ' = false
If IsNull(kod_cexa) And IsNull(kod_cexa) =  0  Then MsgBox IsNull(kod_cexa) ' = false
P.S. Null и 0 для IsNull - разные вещи
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371800
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в or или and, а в том, что при kod_cex = Null эта строка выдаст ошибку.

Таки да, все функции должны быть посчитаны перед тем, как их значения могут быть обработаны If. If получает результат логической операции IsNull(kod_cexa) Or Val(kod_cex) = 0 и прозводит выполнение той или иной части кода, он ничего не высчитывает и не обязан знать, что за параметры передаются в какие функции.
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371813
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodorвот если стоит оператор "и", тогда при не выполнении первого условия, он во второе и не заглядывает.
Только не в VB. В if всегда вычисляются все выражения. За счет этого возможны разного рода ошибки. Например:
Код: plaintext
If intVAR<> 0  AND ( 10 /intVAR)= 2  then
Вывалиться с ошибкой деление на ноль, хотя вроде мы постарались её обойти.
Из этого же свойства рождается метод оптимизации.
Выражение
Код: plaintext
1.
2.
3.
4.
5.
If A> 5  then
    If A< 10  then
          операторы
    endif
endif
работает быстрее чем
Код: plaintext
1.
2.
3.
If A> 5  AND If A< 10  then
          операторы
    endif
endif
особено в цикле и если A часто бывает меньше пяти.
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371816
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был не прав насчет ошибки, в условии две разные переменные kod_cex и kod_cex a (или это очепятка?), но прав по поводу If.
vkodor тогда при не выполнении первого условия, он во второе и не заглядывает. Заглядывает, заглядывает...
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34371830
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
If IsNull(kod_cexa) Or Val( "" & kod_cexa) =  0  Then
Приходиться приспосабливаться к языку.
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34372020
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy FAndrew
согласен заглядывает...
по мне лучше объявить переменную и не делать лишних проверок
Код: plaintext
1.
2.
3.
4.
Dim kod_cexa As Long
If  kod_cexa =  0  Then MsgBox intVAR

Dim kod_cexa As String
If Val(kod_cexa) =  0  Then MsgBox kod_cexa =  0 

видимо поэтому я не встречался с таким ...
А вообще забавно возьму на заметку.
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34372627
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это не все !
Еще есть оператор IIF

Оператор IIF вычислит ОБА возвращаемых значения:
Вот это вызовет ошибку "Deivision by zero"
Код: plaintext
?IIf( 1  =  1 ,  10  /  2 ,  10  /  0 )
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34375129
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klen_
Код: plaintext
If IsNull(kod_cexa) Or Val( "" & kod_cexa) =  0  Then
Приходиться приспосабливаться к языку.

Лучше так:

Код: plaintext
1.
2.
If Nz(kod_cexa, 0 ) =  0  Then
    ...
End If

В VBA функция Nz есть.

В VB6 ее нет, но можно сделать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function Nz(Value, ValueIfNull) As Variant
    If IsNull(Value) Then
        Nz = ValueIfNull
    ElseIf IsEmpty(Value) Then
        Nz = ValueIfNull
    Else
        Nz = Value
    End If
End Function
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34375846
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше использовать функции типа
Код: plaintext
1.
2.
3.
4.
5.
6.
Public Function StrFromVar(value) As String
    If Not IsNull(value) Then StrFromVar = value
End Function

Public Function IntFromVar(value) As Integer
    If Not IsNull(value) Then IntFromVar = value
End Function
Они более производительны при использовании в циклах. И лаконичней.
...
Рейтинг: 0 / 0
Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
    #34376350
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Зачем Basic выполняет вторую часть оператора OR если первая уже ИСТИНА?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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