2015-11-23 3 views
0

поэтому я пишу игру в блэкджек для моего проекта Advanced Higher Computing Science в школе, и у меня есть вопрос о синтаксисе логических операторов в VB.Синтаксис логического оператора в VB для моего школьного проекта

Вот ситуация ..

If X>Y AND (A=True Or B=True Or C=True) Then 
    Do something 
End IF 

Допустим, например, что X действительно больше, чем Y, и А истинно, а B и C являются ложными. Насколько я понимаю, оператор будет выполняться, потому что X больше Y, и хотя бы одно из условий в скобках истинно, но я не совсем уверен, правильно ли это. Могут ли скобки использоваться таким образом, чтобы вещи были логически правильными? Или мне нужно отдельно писать условия, касающиеся A, B и C? Например ...

If X>Y AND A=True Then 
    Do something 
End IF 

If X>Y AND B=True Then 
    Do something 
End IF 

If X>Y AND C=True Then 
    Do something 
End IF 

В принципе, можно скобки можно использовать как метод «короткая рука», чтобы сделать код немного короче и менее суматоху? Я использую последнюю версию VB, 2015.

Большое спасибо за любую помощь, я ценю это!

P.S. - Я не могу поставить свой фактический код в Интернете, так как это может вызвать у меня проблемы с экзаменационным советом, поскольку это официальная оценка.

+1

Да, согласно вашему утверждению, все выглядит нормально. Вы на самом деле пытались запустить свой код? У вас возникли какие-либо проблемы? Я думаю, ваш '=' на самом деле означает '==', не так ли? –

+2

Нет, потому что если в вашем втором фрагменте более одного из символов 'A' или' B' или 'C' истинно, код' Do something' будет выполнен более одного раза. –

+0

Хорошо, спасибо за вашу помощь! Да, я побежал, но у меня ошибка, и я подозревал, что это может быть проблема с синтаксисом, который я использовал.Я еще раз посмотрю на это. –

ответ

0

Рассмотрим этот оригинальный пример

If X>Y AND (A=True Or B=True Or C=True) Then 

Он говорит, что 2 условия должны быть соблюдены, чтобы оценить это True. X должно быть больше, чем Y, а также, условие в скобках должно быть оценено до True. Во-первых, позволяет оптимизировать код, чтобы использовать .NET эффективно

If X>Y AndAlso (A OrElse B OrElse C) Then 

В вашем случае, если X>Y вычисляется в False нет никаких оснований для продолжения. Следовательно, AndAlso. Это ярлык. То же самое с OrElse. Если A оценивает значение true, нам не нужно оценивать другие условия - это поддерживается вашей логикой. Теперь, A=True - это шум. И вот почему вы называете логические переменные, isSomething, hasSomething, [doneSomething], где doneSomething - это глагол, то есть created, completed, disposed, allowed.

Теперь давайте посмотрим на ваш второй фрагмент кода. Очевидно, что во-первых, это то, что вы повторно оцениваете X>Y 3 раза и вместе, вы можете сделать Do something 3 раза. Этот синтаксис широко используется, но это было бы что-то вдоль этих линий (чтобы создать такую ​​же логику, что и первой оценки)

If Not X>Y Then 
    Return ' exit because your first evaluation must be true 
End If 

If A Then 
    ' Do something 
    Return ' Success and return 
End If 

If B Then 
    ' Do something 
    Return ' Success and return 
End If 

If C Then 
    ' Do something 
    Return ' Success and return 
End If 

Конечно, код выше делает мало смысла, потому что очевидно, повторение. Это лучше

If Not X>Y Then 
    Return ' exit because your first evaluation must be true 
End If 

If A OrElse B OrElse C Then 
    ' Do something 
End If 

Это имеет смысл, но затем снова, перейдите к строке # 2 и использовать оптимизированный единый код строки - он будет делать то же самое.

Смежные вопросы