表达式与语句

表达式与语句

我问的是c#,但在大多数其他语言中也是如此。

有没有人能很好的定义表达陈述有什么不同吗?


杨__羊羊
浏览 429回答 3
3回答

拉丁的传说

表达:计算值的值。例子:1+2/x声明:做某事的代码行。例子:后藤100在最早的通用编程语言(如FORTRAN)中,区别是非常清楚的.在FORTRAN中,语句是一个执行单位,是您所做的事情。它没有被称为“行”的唯一原因是因为它有时跨越多行。一个表情本身不能做任何事情.。你必须把它赋值给一个变量。1 + 2 / X是FORTRAN中的一个错误,因为它什么都不做。你必须用这句话做点什么:X = 1 + 2 / XFortran没有我们今天所知道的语法-这个想法是和Backus-NaurForm(BNF)一起发明的,作为Algol-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#中仅用于赋值、调用、增量和递减表达式;请参见斯科特·维斯涅夫斯基的回答).有两个“句法类别”(这是语句和表达式的类型的技术名称)可能会导致重复工作。例如,C有两种形式的条件,语句形式if (E) S1; else S2;以及表达形式E ? E1 : E2有时人们想要重复是不存在的:例如,在标准C中,只有一条语句可以声明一个新的局部变量-但是这种能力非常有用,GNU C编译器提供了一个GNU扩展,它使表达式也可以声明局部变量。其他语言的设计者不喜欢这种复制,他们很早就看到了如果表达式有副作用以及值,那么句法语句和表达式之间的区别并不是很有用,所以他们把它去掉了。Haskell、Icon、Lisp和ML都是没有语法语句的语言-它们只有表达式。即使是类结构化循环和条件形式也被认为是表达式,它们有值-但不是很有趣的值。

慕少森

我想对乔尔上面的回答作一个小小的修正。C#不允许将所有表达式用作语句。特别是,只有赋值、调用、增量和递减表达式可以用作语句。例如,C#编译器将以下代码标记为语法错误:1 + 2;
打开App,查看更多内容
随时随地看视频慕课网APP