I like »to have« the most for the relationship between an
expression and its value, while I do not like to use
»return« in this case. »Yields« still is acceptably, too.
(Just a note to myself
Actually, values are properties of evaluations and not
of expressions. Surely,
5+1
has a value, but
time( 0 )
does not have a value - each evaluation might yield another
value! So the value belongs to the evaluation not to the
expression. In comparison: mathematical terms have values.
Well, the expression »time( 0 )« and »5 + 1« both have one
thing, and this is meaning: While »5 + 1« means the sum of 5
and 1, »time( 0 )« means the operation »time( 0 )«. This
meaning does not depend on the evaluation. But in a context
like, for example, during the evaluation of a
superexpression, an expression represents the value of its
evaluation (during the evaluation of its superexpression),
not its meaning. For example, when »1+time(0)« is evaluated,
the sum is taken of 1 and the value of an evaluation of
»time(0)«.
When »f(x)« is an expression and »x« is a subexpression, I
think it is save to say that for each evaluation of »f(x)«,
the subexpression »x« is evaluated once, and this
subexpression evaluation does not start before the whole
expression evaluation starts and does not end after the
whole expression evaluation ends. The value of this
evaluation of the subexpression then is used as the
value of this subexpression for this evaluation of the
whole expression.
(For simplicity, in the previous paragraph, I ignored
conditional expressions like »0&&x«, which do not evaluate
»x«.)