2012-05-02 78 views
1

任何計算機語言都有'表達'和'陳述'。在概念上,差異是什麼?關於表達和陳述的語言概念

+3

關鍵是在表達式上下文中不允許使用語句。並且注意並不是所有的語言都有語句。 –

+1

我不明白爲什麼這裏有這麼多人回答問題,而不是回答問題。 – Klaim

+2

@Klaim也許是因爲它很難downvote評論:) –

回答

5

wikipedia摘自:

在大多數語言中,陳述與該 語句表達對比不返回結果,並僅僅因爲它們 副作用執行,而表達式總是返回結果並且經常做 根本沒有副作用。在命令式編程語言中,Algol 68是少數幾個可以返回結果的語句之一。 在語言,其結構必須和功能的風格,如 Lisp的家庭,表達式和語句之間的區別並不 發:即使在連續的上下文中執行表達式只是爲了 其副作用並且其返回值不使用被認爲是 「表情」。在純函數式編程中,沒有 語句;一切都是一種表達。

2

表達式具有值,而語句不具有。如果你可以將它作爲參數傳遞給一個函數,那它就是一個表達式。如果你不能,這是一個聲明。 C派生語言中的控制流構造通常是語句(不能將'if {}'塊作爲函數參數傳遞)。因此,這些語言傾向於爲「if」(如三元運算符)提供表達形式。當然,許多函數式語言的重點在於一切都有價值,而且這些函數是一流的值,這意味着一切都是表達式。語句通常以命令式語言出現,您希望編寫不一定返回值的命令。有關詳細信息,請參閱鏈接。
http://lambda-the-ultimate.org/node/1044
而StackOverflow的這個問題也可以幫到你。
Expression Versus Statement

0

statements通常沒有價值。 expressions通常確實有價值。

這是語言如Ruby或二郎說的東西提供一個值,如if .. end結構常可見:

> foo = if 1 then "hello" else "goodbye" end 
=> "hello" 
> foo 
=> "hello" 
1> Foo = if 1 =:= 1 -> 
1> hello; 
1> true -> 
1> goodbye 
1> end. 
hello 
2> 

許多語言不會允許你使用lvalue = if ...

0

語言的「語句」實際上是計算機系統執行某些操作的指令。

語言的「表達式」是運算符和操作數的組合,如z = x + y。粗略地說,我可以說語言表達本質上是數學的。

每種語言的「表達」都是語言的「語句」,但每種語言的「語句」不是語言的「表達」。

+0

語句不一定是表達式的子集;你可以想象一種語言,只要寫'a + b'是非法的,不用說'c = a + b'。 – Dougal