Question: I read that an expression is anything that gives some value, like `2 + X`, while a statement is any instruction to the computer to execute something, like `print("hi")`.

What about the following line of code?

`X = someFunction() + 2`

`someFunction()` returns some numerical value (I think a lot of languages wouldn't compile this code if it didn't), and thus `someFunction() + 2` is 'something that yields some value' - aka an expression.

But, `someFunction()` is code to be executed, thus a statement.

My question:

There are often lines of code that **equal some value**, but are also an **instruction to be executed**. What are these lines of code considered?

Answer: 
In certain computer languages called "functional languages", everything--including the code that prints "hi"--is an expression. At the other extreme, you can write code in machine language (so you, not a compiler, are deciding exactly what sequence of bytes should compose the executable program), and at that level practically everything (even adding 2 to something) is an "instruction to the computer to execute something".

I've used a lot of different computer languages, and a far as I can recall, in each case there was documentation somewhere defining what makes a statement in that particular language (if indeed the language even has a concept of "statement"). The definition is based on syntax, not so much on what the code does.

For example, in C or C++, if you write

```
{ x + 2; }

```

then technically the "x + 2;" is a statement. It is a useless statement that doesn't do anything, but syntactically, it is a statement nevertheless. In fact, one way to write a statement in C is to just append a semicolon to an expression (<http://msdn.microsoft.com/en-us/library/1t054cy7.aspx>). You don't even need the expression; a semicolon by itself can be a statement (<http://msdn.microsoft.com/en-us/library/h7zyw61x.aspx>).

By the way, in C++, the '+' in an expression such as (x + 2) may actually be a function call. So if you say anything that calls a function is a statement, then (x + 2) would be, or at least could be, a statement in C++. But I don't know any authority who defines it that way.
I would say that the "someFunction() + 2" is an expression being evaluated. Then I would say that "x = someFunction() + 2" is a statement, because most languages would generally evaluate the function's return plus two, and then assign that value to x.