どのコンピュータ言語にも「式」と「ステートメント」があります。コンセプトとして、違いは何ですか?
4 に答える
ウィキペディアから引用:
ほとんどの言語では、ステートメントは結果を返さず、副作用のためだけに実行されるという点で式と対照的です。一方、式は常に結果を返し、多くの場合、副作用はまったくありません。命令型プログラミング言語の中で、Algol 68 はステートメントが結果を返すことができる数少ない言語の 1 つです。Lisp ファミリなどの命令型と関数型のスタイルが混在する言語では、式とステートメントの区別は行われません。副作用のためだけに逐次コンテキストで実行され、戻り値が使用されない式でさえ、「式」と見なされます。純粋な関数型プログラミングでは、ステートメントはありません。すべては表現です。
式には値がありますが、ステートメントには値がありません。関数に引数として渡すことができれば、それは式です。できないなら宣言です。C 派生言語の制御フロー構造は、一般にステートメントです ('if {}' ブロックを関数パラメーターとして渡すことはできません)。その結果、これらの言語は、(三項演算子のような) 'if' の表現形式を提供する傾向があります。もちろん、多くの関数型言語の要点は、すべてに値があり、関数が第一級の値であるということです。つまり、すべてが式であるということです。ステートメントは通常、必ずしも値を返さないコマンドを記述したい命令型言語で表示されます。詳細については、リンクを参照してください。
http://lambda-the-ultimate.
式とステートメント
言語の「ステートメント」は、実際にはコンピューター システムが何かを行うための命令です。
言語の「式」は、z=x+y のような演算子とオペランドの組み合わせです。大雑把に言えば、言語表現は本質的に数学的であると言えます。
すべての言語の「表現」は言語の「ステートメント」ですが、すべての言語の「ステートメント」は言語の「表現」ではありません。
statements
通常、値はありません。expressions
通常、値があります。
if .. end
これは、コンストラクトなどに値を提供する Ruby や Erlang などの言語でよく見られます。
> 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 ...
。