Expression Versus Statement

前端 未结 21 1743
别那么骄傲
别那么骄傲 2020-11-22 11:54

I\'m asking with regards to c#, but I assume its the same in most other languages.

Does anyone have a good definition of expressions and statements

相关标签:
21条回答
  • 2020-11-22 12:27

    An expression is something that returns a value, whereas a statement does not.

    For examples:

    1 + 2 * 4 * foo.bar()     //Expression
    foo.voidFunc(1);          //Statement
    

    The Big Deal between the two is that you can chain expressions together, whereas statements cannot be chained.

    0 讨论(0)
  • 2020-11-22 12:28

    Statements are grammatically complete sentences. Expressions are not. For example

    x = 5
    

    reads as "x gets 5." This is a complete sentence. The code

    (x + 5)/9.0
    

    reads, "x plus 5 all divided by 9.0." This is not a complete sentence. The statement

    while k < 10: 
        print k
        k += 1
    

    is a complete sentence. Notice that the loop header is not; "while k < 10," is a subordinating clause.

    0 讨论(0)
  • 2020-11-22 12:31

    In a statement-oriented programming language, a code block is defined as a list of statements. In other words, a statement is a piece of syntax that you can put inside a code block without causing a syntax error.

    Wikipedia defines the word statement similarly

    In computer programming, a statement is a syntactic unit of an imperative programming language that expresses some action to be carried out. A program written in such a language is formed by a sequence of one or more statements

    Notice the latter statement. (although "a program" in this case is technically wrong because both C and Java reject a program that consists of nothing of statements.)

    Wikipedia defines the word expression as

    An expression in a programming language is a syntactic entity that may be evaluated to determine its value

    This is, however, false, because in Kotlin, throw new Exception("") is an expression but when evaluated, it simply throws an exception, never returning any value.

    In a statically typed programming language, every expression has a type. This definition, however, doesn't work in a dynamically typed programming language.

    Personally, I define an expression as a piece of syntax that can be composed with an operator or function calls to yield a bigger expression. This is actually similar to the explanation of expression by Wikipedia:

    It is a combination of one or more constants, variables, functions, and operators that the programming language interprets (according to its particular rules of precedence and of association) and computes to produce ("to return", in a stateful environment) another value

    But, the problem is in C programming language, given a function executeSomething like this:

    void executeSomething(void){
        return;
    }
    

    Is executeSomething() an expression or is it a statement? According to my definition, it is a statement because as defined in Microsoft's C reference grammar,

    You cannot use the (nonexistent) value of an expression that has type void in any way, nor can you convert a void expression (by implicit or explicit conversion) to any type except void

    But the same page clearly indicates that such syntax is an expression.

    0 讨论(0)
提交回复
热议问题