亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

表達式與語句

表達式與語句

楊__羊羊 2019-07-11 13:13:12
表達式與語句我問的是c#,但在大多數其他語言中也是如此。有沒有人能很好的定義表達和陳述有什么不同嗎?
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

表達:計算值的值。例子:1+2/x
聲明:做某事的代碼行。例子:后藤100

在最早的通用編程語言(如FORTRAN)中,區別是非常清楚的.在FORTRAN中,語句是一個執行單位,是您所做的事情。它沒有被稱為“行”的唯一原因是因為它有時跨越多行。一個表情本身不能做任何事情.。你必須把它賦值給一個變量。

1 + 2 / X

是FORTRAN中的一個錯誤,因為它什么都不做。你必須用這句話做點什么:

X = 1 + 2 / X

Fortran沒有我們今天所知道的語法-這個想法是和Backus-NaurForm(BNF)一起發明的,作為Algol-60定義的一部分。在這一點上語義“有價值”與“做某事”的區別體現在句法一種短語是表達式,另一種是語句,解析器可以區分它們。

后來語言的設計者模糊了這種區別:他們允許句法表達式來做事情,他們允許有價值的句法語句?,F存最早的流行語言例子是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都是沒有語法語句的語言-它們只有表達式。即使是類結構化循環和條件形式也被認為是表達式,它們有值-但不是很有趣的值。


查看完整回答
反對 回復 2019-07-11
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

我想對喬爾上面的回答作一個小小的修正。

C#不允許將所有表達式用作語句。特別是,只有賦值、調用、增量和遞減表達式可以用作語句。

例如,C#編譯器將以下代碼標記為語法錯誤:

1 + 2;


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 493 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號