История изменений
Исправление lbvf50txt, (текущая версия) :
послушал местных пиарасов Столярова, начал читать второй том и увидел вот такое: https://i.postimg.cc/9MpBGHkH/stolyar.png
Тут анонимус цитирует абзац из 4.3.5 Операции и Выражения. Из второго тома «Системы и Сети» А.В. Столярова.
Конкретно выделяет следующую строку о short-circuit evaluation: «если значения выражения уже определено, второй операнд не вычисляется». Речь и идет о логических операциях.
- http://stolyarov.info/books/programming_intro/2_9
- http://stolyarov.info/books/pdf/progintro_2_9_v2.pdf
это и есть ваш легендарный мегапрепод программирования? и много у него в книгах такой дичи? аж перехотелось читать
Всё верно, в логических бинарных операторах при определенных условиях расчитывается только одна часть выражения.
- В случае Логического И
&&
, если левое выражение falsely, сразу возвращается falsely. Правая часть не расчитывается. - В случае Логического ИЛИ
||
, если левое выражение truly, сразу возвращается truly. Правая часть не расчитыатеся.
Могут быть нюансы, например в Ruby "one"||1
вернет «one», 1 || true
вернет 1. Т.е. в Ruby возвращаются значения выражений, а не булевый тип как таковой. Но сам факт о частичном исполнении логических бинарных операторов верен.
Код на Go:
package main
import "fmt"
func truly() bool {
fmt.Println("it is true")
return true
}
func falsely() bool {
fmt.Println("it is false")
return false
}
func main() {
ans1 := truly() || falsely() // it is true
ans2 := falsely() && truly() // it is false
fmt.Println(ans1, ans2) // true false
}
Код на Go Playground:
https://go.dev/play/p/qRNaXzUV420
Cтоляров пишет верно. В вопросах Си на него можно полагаться смело.
Исправление lbvf50txt, :
послушал местных пиарасов Столярова, начал читать второй том и увидел вот такое: https://i.postimg.cc/9MpBGHkH/stolyar.png
Тут анонимус цитирует абзац из 4.3.5 Операции и Выражения. Из второго тома «Системы и Сети» А.В. Столярова.
Конкретно выделяет следующую строку: «если значения выражения уже определено, второй операнд не вычисляется». Речь и идет о логических операциях.
- http://stolyarov.info/books/programming_intro/2_9
- http://stolyarov.info/books/pdf/progintro_2_9_v2.pdf
это и есть ваш легендарный мегапрепод программирования? и много у него в книгах такой дичи? аж перехотелось читать
Всё верно, в логических бинарных операторах при определенных условиях расчитывается только одна часть выражения.
- В случае Логического И
&&
, если левое выражение falsely, сразу возвращается falsely. Правая часть не расчитывается. - В случае Логического ИЛИ
||
, если левое выражение truly, сразу возвращается truly. Правая часть не расчитыатеся.
Могут быть нюансы, например в Ruby "one"||1
вернет «one», 1 || true
вернет 1. Т.е. в Ruby возвращаются значения выражений, а не булевый тип как таковой. Но сам факт о частичном исполнении логических бинарных операторов верен.
Код на Go:
package main
import "fmt"
func truly() bool {
fmt.Println("it is true")
return true
}
func falsely() bool {
fmt.Println("it is false")
return false
}
func main() {
ans1 := truly() || falsely() // it is true
ans2 := falsely() && truly() // it is false
fmt.Println(ans1, ans2) // true false
}
Код на Go Playground:
https://go.dev/play/p/qRNaXzUV420
Cтоляров пишет верно. В вопросах Си на него можно полагаться смело.
Исходная версия lbvf50txt, :
это и есть ваш легендарный мегапрепод программирования? и много у него в книгах такой дичи? аж перехотелось читать
Всё верно, в логических бинарных операторах при определенных условиях расчитывается только одна часть выражения.
- В случае Логического И
&&
, если левое выражение falsely, сразу возвращается falsely. Правая часть не расчитывается. - В случае Логического ИЛИ
||
, если левое выражение truly, сразу возвращается truly. Правая часть не расчитыатеся.
Могут быть нюансы, например в Ruby "one"||1
вернет «one», 1 || true
вернет 1. Т.е. в Ruby возвращаются значения выражений, а не булевый тип как таковой. Но сам факт о частичном исполнении логических бинарных операторов верен.
Код на Go:
package main
import "fmt"
func truly() bool {
fmt.Println("it is true")
return true
}
func falsely() bool {
fmt.Println("it is false")
return false
}
func main() {
ans1 := truly() || falsely() // it is true
ans2 := falsely() && truly() // it is false
fmt.Println(ans1, ans2) // true false
}
Код на Go Playground:
https://go.dev/play/p/qRNaXzUV420
Cтоляров пишет верно. В вопросах Си на него можно полагаться смело.