Смущает оператор NOT при использовании в операторах if?
func nonZeroAnswer (a : Double, b : Double) -> Bool {
if a / b == 0 { return true} else {return false}
}
nonZeroAnswer (5, 0) //This returns false
if !nonZeroAnswer(2, 2) {
print("This is a Zero Answer")
}
Я перечитывал документацию Apple снова и снова и знаю, как работает оператор Not и как он преобразует логическое значение в его противоположность, но я не знаю, как применить его в более сложных сценариях кода, таких как операторы if, функции и т. Д. Я даже не знаю, правильно ли я написал эту основную программу, я вообще не понимаю, как писать такую основную программу. Извините, если это кажется мелким вопросом, но я прочитал документацию по яблоку, а также изучаю быструю книгу, которая предположительно для начинающих, я смотрел множество видео на YouTube, но просто не могу обернуться, используя Не оператор в других сценариях, кроме обычного trueValue = True ........! TrueValue // делает его ложным...... Это я понимаю, но к тому же просто запутывается, как в этой программе, которую я пытался написать выше.
2 ответа
Его основное кодирование.! Символ просто инвертирует логическое значение. Рассмотрим следующие 2 сценария:-
nonZeroAnswer(2,2)
//returns false as (2/2 = 1) != 0
//Hence !nonZeroAnswer(2,2) = !false = true
//Hence "This is a zero answer" will be printed in this case as the condition for if block is true
nonZeroAnswer(0,3)
//returns true as (0/3 = 0) == 0
//Hence !nonZeroAnswer(0,3) = !true = false
//Hence "This is a zero answer" will not be printed as the condition for if block is false. So wont enter the block.
Логические выражения, с и без !
оператор остается тем же, когда вы используете их в контексте оператора управления, таких как if
, while
и т. д. Единственное отличие состоит в том, что делает контрольный оператор на основании результата оценки.
Один из способов рассуждать о булевых выражениях - рассматривать их независимо от их контекста. Например, вы можете посмотреть на выражение
!nonZeroAnswer(2, 2)
и увидеть, что это true
когда nonZeroAnswer(2, 2)
является false
, и наоборот. После этого вы можете "вставить" результат в if
или while
или каким бы ни был контекст, и скажем, например, что
if !nonZeroAnswer(2, 2) {
print("This is a Zero Answer")
}
печатает что-то, когда nonZeroAnswer(2, 2)
возвращается false
,
Примечание: вместо написания условного возврата true
или же false
, вы можете вернуть само логическое выражение, потому что оно имеет то же значение:
func nonZeroAnswer (a : Double, b : Double) -> Bool {
return a / b == 0
}
a / b == 0
уже логическое выражение, которое возвращает true
при делении a
от b
дает ноль, поэтому нет необходимости ставить if
условно вокруг него.