Порядок выполнения логических операторов
При использовании логических операторов "И" (&&
) и "ИЛИ" (||
) в Go необходимо определить булевые значения по обе стороны от оператора. Но какую сторону оценивается первой?
Давайте исследуем это вместе.
Напишите следующий код в файле opePractice.go
:
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) && rightFunc(true) {
fmt.Println("Evaluation is complete")
}
}
Запустите код:
cd ~/project
go run opePractice.go
Left function is called!
Right function is called!
Evaluation is complete
Не трудно заметить, что в операции логического "И" сначала оценивается левый операнд, а затем правый.
А как обстоит дело с операцией логического "ИЛИ"? Напишите следующий код в файле opePractice.go
:
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) || rightFunc(true) {
fmt.Println("Logical OR evaluation is complete")
}
}
Запустите код:
cd ~/project
go run opePractice.go
Left function is called!
Logical OR evaluation is complete
Порядок оценки как в операции логического "И", так и в операции логического "ИЛИ" идет слева направо.
Однако, в операции логического "ИЛИ", если левый операнд равен true
, правый операнд не оценивается.
Поэтому, в реальной разработке мы должны помещать условия, которые с большей вероятностью будут истинными, слева от логического оператора "ИЛИ", тем самым сокращая время выполнения программы.