我问的是关于c#的问题,但我认为它在大多数其他语言中都是一样的。

有人对表达式和语句有很好的定义吗?它们的区别是什么?


当前回答

我对这里的答案都不太满意。我查看了c++ (ISO 2008)的语法。然而,出于教学和编程的考虑,答案可能足以区分这两个元素(尽管现实看起来更复杂)。

语句由零个或多个表达式组成,但也可以是其他语言概念。这是语法的扩展巴克斯诺尔形式(语句节选):

statement:
        labeled-statement
        expression-statement <-- can be zero or more expressions
        compound-statement
        selection-statement
        iteration-statement
        jump-statement
        declaration-statement
        try-block

我们可以看到c++中被认为是语句的其他概念。

表达式-语句是自解释的(一个语句可以由0个或多个表达式组成,仔细阅读语法,这很棘手) 例如,Case是一个带标签的语句 选择语句是if if/else, case 迭代语句是while, do…然而,对于(……) 跳转语句有break, continue, return(可以返回表达式),goto Declaration-statement是声明的集合 try-block是表示try/catch块的语句 在语法中可能还有更多

以下是表达部分的节选:

expression:
        assignment-expression
        expression "," assignment-expression
assignment-expression:
        conditional-expression
        logical-or-expression assignment-operator initializer-clause
        throw-expression

表达式通常是或包含赋值 条件表达式(听起来容易误导人)指的是使用运算符(+,-,*,/,&,|,&&,||,…) 抛出表情——呃?throw子句也是一个表达式

其他回答

你可以在维基百科上找到这个,但是表达式被求值为某个值,而语句没有求值。

因此,表达式可以用在语句中,但不能用在语句中。

请注意,一些语言(如Lisp,我相信Ruby,以及许多其他语言)并不区分语句和表达式……在这样的语言中,所有东西都是一个表达式,并且可以与其他表达式连接。

很简单:表达式的值是一个值,而语句不是。

语句->按顺序执行的指令 表达式->返回值的求值

语句基本上就像算法中的步骤或指令,语句执行的结果是指令指针的实现(所谓的汇编程序)。

表达式乍一看并不意味着和执行顺序,它们的目的是求值并返回值。在命令式编程语言中,表达式的求值是有顺序的,但这只是命令式模型的原因,而不是它们的本质。

语句示例:

for
goto
return
if

(所有这些都意味着执行的行(语句)提前到另一行)

表达式示例:

2+2

(这并不是指执行,而是指评估)

最准确地说,语句必须有“副作用”(即命令式),表达式必须有值类型(即不是底部类型)。

语句的类型是单元类型,但由于停止定理,单元是虚构的,所以我们说底层类型。


Void并不是最下面的类型(它不是所有可能类型的子类型)。它存在于没有完整的声音类型系统的语言中。这听起来可能有点势利,但是完整性(如方差注释)对于编写可扩展软件是至关重要的。

让我们看看维基百科对这件事是怎么说的。

https://en.wikipedia.org/wiki/Statement_ (computer_science)

在计算机编程中,语句是命令式编程语言中最小的独立元素,它表示要执行的某些操作。 许多语言(例如C语言)区分语句和定义,语句只包含可执行代码和声明标识符的定义,而表达式只计算值。

声明中,

语句是构造所有c#程序的过程构建块。语句可以声明局部变量或常量,调用方法,创建对象,或为变量、属性或字段赋值。

由花括号括起来的一系列语句构成了一个代码块。方法体就是代码块的一个例子。

bool IsPositive(int number)
{
    if (number > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

c#中的语句通常包含表达式。c#中的表达式是包含文字值、简单名称或操作符及其操作数的代码片段。

表达式,

表达式是可以计算为单个值、对象、方法或名称空间的代码片段。最简单的两种表达式是字面量和简单名称。字面量是一个没有名字的常量值。

int i = 5;
string s = "Hello World";

i和s都是用来标识局部变量的简单名称。当在表达式中使用这些变量时,将检索变量的值并将其用于表达式。