Аналог If - And - Then

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Аналог If - And - Then

Сообщение Williams » 14.06.2008 (Сб) 2:08

Существует ли конструкция аналогичная If ... And ... Then...

с отличием, чтобы второе условие не проверялось, если первое ложно?

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Re: Аналог If - And - Then

Сообщение M.A.R.K » 14.06.2008 (Сб) 6:24

Williams
Код: Выделить всё
If Первое условие then
  If Второе условие then
    ...
  End if
End if
-Решил Хакер блины печь...
-Первый блин у него вышел, как обычно - Комом...
-А второй - Экзешником...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.06.2008 (Сб) 6:58

Конструкий не существует таких. Потому что And это оператор, и к If никакого прямого отношения не имеет.

Тем не менее, вопрос имеет смысл.

В некоторых языках существует два вида операторов: Логические и Бинарные.

Не вдаваясь в подробности: логические операторы в силу своей особенности не требуют вычисления правого операнда, если однозначный результат можно выдать на основании левого.

Например ЛОГ_И не будет вычислять правый операнд если левый - ложь, а ЛОГ_ИЛИ не будет вычислять правый операнд если левый - истина.

В VB операторы And и Or -- бинарные, и им в любом случае (для правильного вычисления) нужно значение правого операнда.

Поэтому задуманного на базе операторов сделать невозможно.

З.Ы. Кстати, такая логика работы операторов не укладывается в рамки RPN, а мне думается, что все выражения VB перегоняются в RPN перед компиляцией.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.06.2008 (Сб) 12:10

Хакер
Словосочетание "бинарный оператор"(binary operator) вообщето означает что у оператора два операнда ;)
В этом плане ЛОГ_ИЛИ у тебя то же будет бинарным.
В некоторых языках существует два вида операторов: Логические и Бинарные.

В этом же плане операторы бывают логические и побитовые(logical\bitwise operators).
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 14.06.2008 (Сб) 18:28

Код: Выделить всё
If a Then If b Then Stop

Так пойдёт? Только, тогда и само действие тоже должно быть на той же строке.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.06.2008 (Вс) 2:41

ANDLL
Да-да, ты прав.

Чертовки описался, про арность операторов вкурсе. :oops:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2008 (Пн) 8:04

arthur2, этот вариант плохо читаем и на практике неприменим.
Lasciate ogni speranza, voi ch'entrate.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.06.2008 (Пн) 11:32

alibek
То что плохо читается - да.
Но почему неприменим?
Артур
 
   

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2008 (Пн) 12:51

If a Then If b Then proc1 Else proc2

К какому условию относится proc2, к a или к b?
Lasciate ogni speranza, voi ch'entrate.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 16.06.2008 (Пн) 13:34

Цель собственно была в том, чтобы не использовать вложенные ветки и сделать программу менее запутанной.

Иногда например бывает так, что нужно проверить свойство какого-то объекта.

If Not Object Is Nothing And Object.Property = "SomeValue" (в глобальном смысле я имел в виду .NET). Даже если объект не инициализирован, свойство будет проверено, что вызовет ошибку.

Надеюсь смысл понятен...



If a Then If b Then proc1 Else proc2

К какому условию относится proc2, к a или к b?




Тоже интересует.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.06.2008 (Пн) 14:15

Williams, мог бы и проверить... Ко второму условию относится. Но это совершенно не очевидно визуально.
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2008 (Пн) 14:16

А чтобы относилось к первому, надо написать Else Else. Но сделать это с первого раза не получится, надо уметь :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.06.2008 (Пн) 14:38

Хакер писал(а):А чтобы относилось к первому, надо написать Else Else. Но сделать это с первого раза не получится, надо уметь :)
А вот с этого места подробнее! Как сие можно измудрицца?
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2008 (Пн) 14:40

Если писать Else Else, то вставляется третий Else, на который VB потом ругается.

Если же написать Else : Else, то двоеточие уберётся, и VB ничего трогать не будет.

Такой же баг, как и Dim zu, [гы гы лол], zwq
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 16.06.2008 (Пн) 15:08

(в глобальном смысле я имел в виду .NET)
В .NET есть AndAlso, а что, не видно в каком разделе создается тема?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.06.2008 (Пн) 18:37

alibek
If a Then If b Then proc1 Else proc2
К какому условию относится proc2


На сколько я понимаю:
Код: Выделить всё
if a then
   if b then proc1 else proc2
end if

Или (если конечно скобки позволил бы бейсик):
If a Then (If b Then proc1 Else proc2)
Мне кажется, это всё же вполне понятно и из записи.

А возможны ещё и такие извращения:

If a Then If b Then proc1 Else proc2 Else proc3
If a Then If b Then proc1 Else: Else proc3
(как заметил Хакер, двоеточие уберётся само)
If a Then If b Then proc1 Else Else Else proc3
(последнее и вовсе загадочное)

Но это уже перебор :)

If Not Object Is Nothing And Object.Property = "SomeValue"
А вот оно, кстати, и возможное применение.
If Not Object Is Nothing Then If Object.Property = "SomeValue" Then Stop
По моему, запись хоть и не привычна, но вполне понятна.
Артур
 
   

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 16.06.2008 (Пн) 18:41

arthur2
Обычно советуют избегать подобных мутных конструкций.
Что бы другой программист смотря код не хватался за голову пытаясь понять тайные измышления. По этой же причине нежелательны всякие while\wend и тп
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.06.2008 (Пн) 18:50

Такой же баг, как и Dim zu, [гы гы лол], zwq

Прикольно! Потом этой переменной можно присваивать значения!

Код: Выделить всё
[гы гы лол] = "гы гы лол"
Debug.Print [гы гы лол]
Артур
 
   

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.06.2008 (Пн) 18:57

ANDLL
Разве я сильно ратовал за такие конструкции? Цитата из меня:
А возможны ещё и такие извращения

Но в случае с объектом, ИХМО, можно и применить - действительно получилось удобно. Раньше я просто знал о возможности подобных "мутных конструкций", а теперь, кажется, нашёл случай, в котором можно их оправдать :)
Артур
 
   

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 18.06.2008 (Ср) 18:55

Viper писал(а):Williams, мог бы и проверить... Ко второму условию относится. Но это совершенно не очевидно визуально.




На тот момент когда вопрос заинтересовал, не было Студии под рукой, сейчас проверил уже

amer
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 02.08.2003 (Сб) 19:41
Откуда: Воронеж

Сообщение amer » 23.06.2008 (Пн) 9:25

простите, а вот эта конструкция не пойдет?

if a then
...
elseif b then
...
else
...
endif

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 23.06.2008 (Пн) 10:35

Нет :roll:.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

    TopList