Incomputer science, anexpression is asyntactic notation in aprogramming language that may be evaluated to determine itsvalue of a specific semantictype.[1][2] It is a combination of one or more numbers,constants,variables,functions, andoperators that the programming language interprets (according to its particularrules of precedence and ofassociation) and computes to produce ("to return", in astateful environment) another value.In simple settings, theresulting value is usually one of variousprimitive types, such asstring,boolean, or numerical (such asinteger,floating-point, orcomplex).
Expressions are often contrasted withstatements—syntactic entities that have no value (an instruction).
Like in mathematics, an expression is used to denote a value to be evaluated for a specific value type accepted syntactically by anobject language. In some cases an expression can't be fully evaluated; in this cases, the value isundefined, even though the calculation was effected and finished.[1]: 26
The process of evaluating an expression is calledevaluation; it can occur in different contexts, such as definition and initialization[needs independent confirmation]. Unlikeinitialization, evaluation is not restricted to the first occurrence.
2 + 3 is both anarithmetic and programming expression, which evaluates to5. A variable is an expression because it denotes a value inmemory, soy + 6 is also an expression. An example of arelational expression is4 ≠ 4, which evaluates tofalse.[3][4]
You can see how the parts of the code can be an expression.
intmain(void){inty=10;// The expression "y = 10";intx=40;// The expression "x = 40";intresult=x+y;// The expression "result = x + y" is evaluated;return0;// When a function is called, its return expression is evaluated and the call expression yields that value to the caller.}
InC (and many otherprogramming languages), the"=" is considered anoperatorlike in mathematics; more specifically, abinary operator.
InC and most C-derived languages, a call to a function with avoid return type is a valid expression, of type void.[5]Values of type void cannot be used, so the value of such an expression is always thrown away.
In many programming languages, a function, and hence an expression containing a function, may haveside effects. An expression with side effects does not normally have the property ofreferential transparency. In many languages (e.g.C++), expressions may be ended with a semicolon (;) to turn the expression into an expressionstatement. This asks the implementation to evaluate the expression for its side-effects only and to disregard the result of the expression (e.g.x+1;) unless it is a part of an expression statement that induces side-effects (e.g.y=x+1; orfunc1(func2());).
The formal notion of a side effect is a change to the abstract state of the running program.
Another class of side effects are changes to the concrete state of the computational system, such as loading data intocache memories. Languages that are often described as "side effect–free" will generally still have concrete side effects that can be exploited, for example, inside-channel attacks.
Furthermore, the elapsed time evaluating an expression (even one with no other apparent side effects), is sometimes essential to the correct operation of a system, as behaviour in time is easily visible from outside the evaluation environment by other parts of the system with which it interacts, and might even be regarded as theprimary effect such as when performingbenchmark testing.
It depends on the particular programming language specification whether an expression with no abstract side effects canlegally be eliminated from the execution path by the processing environment in which the expression is evaluated.