a condition is a boolexpr. there are 2 sub-types a boolexpr, condition and filter. the diffrence is non-existant. Condition() will return the same output for the same input, thus you never have to destroy boolexprs as Condition() will always return the same handle for the same function input.
a boolexpr is a kind-of pointer to a function that returns boolean.
a statement like "if condition then" takes a boolean-logic expression. A boolean logic expression is any combination of boolean operators like == != >= <= < > and or, that equate down to a single boolean answer of true or false.
boolean operates take an operator and an operand. In other words, "boolean expression == boolean expression" this allows you to do things like "boolean expression == boolean expression and boolean expression"
in warcraft 3, boolean expressions are evaluated in a short circut manner. this means that if an answer can be infferd from the current execution, then the rest of the expression is not executed. example:
MyFuncReturnsTrue() or ThisFuncWillNeverBeExecuted()
this is due to the fact that the second function would not need to be executed in order to know the result of the expression, so why execute it? there is an order of operations in JASS, but mostly things are executed left-to-right, including brakets.
hope this explains everything...