I just did this test:
func _ready() -> void:
var a: bool = t(1) and t(2)
var b: bool = f(3) or f(4)
var c: bool = t(5) or f(6)
var d: bool = f(7) and t(8)
func t(i: int) -> bool:
print("t", i)
return true
func f(i: int) -> bool:
print("f", i)
return false
The output is:
which shows that GDScript implements short-circuiting for both the and and or operators. The f(6) and t(8) calls are not performed.
If I replace and with &&, and or with ||, the results are the same.