我问的是关于c#的问题,但我认为它在大多数其他语言中都是一样的。
有人对表达式和语句有很好的定义吗?它们的区别是什么?
我问的是关于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都是用来标识局部变量的简单名称。当在表达式中使用这些变量时,将检索变量的值并将其用于表达式。
其他回答
你可以在维基百科上找到这个,但是表达式被求值为某个值,而语句没有求值。
因此,表达式可以用在语句中,但不能用在语句中。
请注意,一些语言(如Lisp,我相信Ruby,以及许多其他语言)并不区分语句和表达式……在这样的语言中,所有东西都是一个表达式,并且可以与其他表达式连接。
最准确地说,语句必须有“副作用”(即命令式),表达式必须有值类型(即不是底部类型)。
语句的类型是单元类型,但由于停止定理,单元是虚构的,所以我们说底层类型。
Void并不是最下面的类型(它不是所有可能类型的子类型)。它存在于没有完整的声音类型系统的语言中。这听起来可能有点势利,但是完整性(如方差注释)对于编写可扩展软件是至关重要的。
让我们看看维基百科对这件事是怎么说的。
https://en.wikipedia.org/wiki/Statement_ (computer_science)
在计算机编程中,语句是命令式编程语言中最小的独立元素,它表示要执行的某些操作。 许多语言(例如C语言)区分语句和定义,语句只包含可执行代码和声明标识符的定义,而表达式只计算值。
为了改进和验证我之前的回答,编程语言术语的定义应该从计算机科学类型理论中解释。
表达式具有除Bottom类型以外的其他类型,即它有一个值。语句具有Unit或Bottom类型。
由此可见,语句只有在产生副作用时才能在程序中发挥作用,因为它要么不能返回值,要么只返回Unit类型的值,而Unit类型的值要么不可赋值(在某些语言中,如C的void),要么可以存储以用于语句的延迟求值。
显然,@pragma或/*comment*/没有类型,因此与语句有所区别。因此,唯一没有副作用的语句类型是非操作。非手术治疗只能作为未来副作用的占位符。由于声明而采取的任何其他行动都是副作用。同样,编译器提示,例如@pragma,不是语句,因为它没有类型。
很简单:表达式的值是一个值,而语句不是。
表达式是返回值的东西,而语句则不是。
例子:
1 + 2 * 4 * foo.bar() //Expression
foo.voidFunc(1); //Statement
两者之间的重要之处在于,您可以将表达式链接在一起,而语句则不能被链接。