Смущает оператор 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 условно вокруг него.

Другие вопросы по тегам