我问的是关于c#的问题,但我认为它在大多数其他语言中都是一样的。
有人对表达式和语句有很好的定义吗?它们的区别是什么?
我问的是关于c#的问题,但我认为它在大多数其他语言中都是一样的。
有人对表达式和语句有很好的定义吗?它们的区别是什么?
当前回答
你可以在维基百科上找到这个,但是表达式被求值为某个值,而语句没有求值。
因此,表达式可以用在语句中,但不能用在语句中。
请注意,一些语言(如Lisp,我相信Ruby,以及许多其他语言)并不区分语句和表达式……在这样的语言中,所有东西都是一个表达式,并且可以与其他表达式连接。
其他回答
下面是我找到的一个最简单的答案。
原文由Anders Kaseorg回答
语句是执行某些操作的完整代码行,而表达式是代码中求值的任何部分。
可以使用操作符将表达式“水平”组合成更大的表达式,而语句只能通过一个接一个地写入或使用块结构来“垂直”组合。
每个表达式都可以用作语句(其效果是计算表达式并忽略结果值),但大多数语句不能用作表达式。
http://www.quora.com/Python-programming-language-1/Whats-the-difference-between-a-statement-and-an-expression-in-Python
表达式:求值为某个值的东西。例如:1 + 2 / x 语句:执行某些操作的代码行。例如:GOTO 100
在最早的通用编程语言(如FORTRAN)中,这种区别是非常明显的。在FORTRAN中,一条语句是一个执行单元,是你所做的一件事。它不被称为“线”的唯一原因是因为有时它跨越多条线。一个表达式本身什么都做不了……你必须把它赋值给一个变量。
1 + 2 / X
是FORTRAN中的一个错误,因为它不做任何事情。你必须对这个表达做些什么:
X = 1 + 2 / X
FORTRAN没有我们今天所知道的语法——这个想法和巴克斯-诺尔表单(BNF)一起被发明出来,作为algolo -60定义的一部分。在这一点上,语义上的区别(“有一个值”和“做某事”)被庄严地体现在语法中:一种短语是表达式,另一种是语句,解析器可以区分它们。
后来语言的设计者模糊了这种区别:他们允许语法表达式做事情,允许有值的语法语句。 现存最早的流行语言例子是C语言。C语言的设计者意识到,如果允许你求一个表达式的值,然后放弃结果,那也没有什么害处。在C语言中,每个语法表达式都可以通过在后面加上分号而变成语句:
1 + 2 / x;
是一个完全合法的声明,即使绝对不会发生任何事情。类似地,在C语言中,表达式可以有副作用——它可以改变一些东西。
1 + 2 / callfunc(12);
因为callfunc可以做一些有用的事情。
一旦您允许任何表达式作为语句,您也可以在表达式中允许赋值操作符(=)。这就是为什么C允许你做
callfunc(x = 2);
这将计算表达式x = 2(将2的值赋给x),然后将该2传递给函数callfunc。
这种表达式和语句的模糊出现在所有的C语言衍生物(C、c++、c#和Java)中,它们仍然有一些语句(如while),但允许几乎任何表达式用作语句(在c#中,只有赋值、调用、自增和自减表达式可以用作语句;参见Scott Wisniewski的回答)。
拥有两个“语法类别”(这是语句和表达式这类东西的专业名称)可能会导致重复工作。例如,C语言中有两种形式的条件句,一种是语句形式
if (E) S1; else S2;
以及表达式形式
E ? E1 : E2
有时人们希望复制不存在的内容:例如,在标准C中,只有语句可以声明一个新的局部变量——但是这种能力非常有用,可以使用 GNU C编译器提供了一个GNU扩展,允许表达式声明局部变量。
Designers of other languages didn't like this kind of duplication, and they saw early on that if expressions can have side effects as well as values, then the syntactic distinction between statements and expressions is not all that useful—so they got rid of it. Haskell, Icon, Lisp, and ML are all languages that don't have syntactic statements—they only have expressions. Even the class structured looping and conditional forms are considered expressions, and they have values—but not very interesting ones.
陈述句是语法上完整的句子。表达式则不然。例如
x = 5
读起来是“x得到5”。这是一个完整的句子。的代码
(x + 5)/9.0
结果是,x + 5都除以9.0这不是一个完整的句子。该声明
while k < 10:
print k
k += 1
是一个完整的句子。注意,循环头不是;"while k < 10 "是从句。
你可以在维基百科上找到这个,但是表达式被求值为某个值,而语句没有求值。
因此,表达式可以用在语句中,但不能用在语句中。
请注意,一些语言(如Lisp,我相信Ruby,以及许多其他语言)并不区分语句和表达式……在这样的语言中,所有东西都是一个表达式,并且可以与其他表达式连接。
我更喜欢“陈述”这个词的形式逻辑意义。它改变了计算中一个或多个变量的状态,从而能够对它们的值做出真或假的声明。
我想,当新的术语或词汇被引入,现有的词汇被“重新定义”,或者用户对他们所描述的现有的、已建立的或“适当的”术语一无所知时,在计算世界和科学中总会出现困惑