コンピュータサイエンスでは、式とは、プログラミング言語における構文要素であり、特定の意味型の値を決定するために評価されるものです。[ 1 ] [ 2 ]これは、プログラミング言語が(特定の優先順位と関連付けの規則に従って)解釈し、計算して別の値を生成する(状態のある環境では「返す」) 1つ以上の定数、変数、関数、演算子の組み合わせです。単純な設定では、結果として得られる値は通常、文字列、ブール値、数値(整数、浮動小数点数、複素数など)といったさまざまな基本型のいずれかになります。
表現は、しばしば文(値を持たない構文要素、つまり命令)と対比される。
数学と同様に、式はプログラミング言語がサポートする特定の値型に対して評価される値を表すために使用されます。場合によっては、式を完全に評価できないことがあります。この場合、計算が実行され完了したとしても、値は未定義となります。 [ 1 ] : 26
式を明確に定義された値型に評価するプロセスを評価と呼びます。評価は、定義や初期化など、さまざまな状況で発生します。
2 + 3は算術式とプログラミング式の両方であり、 に評価されます。変数はメモリ5内の値を表すため式であり、も式です。関係式の例としては があり、 に評価されます。[ 3 ] [ 4 ]y + 64 ≠ 4false
コードの各部分がどのように式になるかがわかります。
int main ( void ) {int y = 10 ; // 式 "y = 10"; int x = 40 ; // 式 "x = 40"; int result = x + y ; // 式 "result = x + y" が評価されます。return 0 ; // 関数が呼び出されると、その戻り値式が評価され、呼び出し式はその値を呼び出し元に返します。}C言語(および他の多くのプログラミング言語)では、 「="」は数学における演算子 、より具体的には二項演算子とみなされます。
C言語およびほとんどのC派生言語では、戻り値の型がvoidの関数呼び出しは、void型の有効な式です。[ 5 ] void型の値は使用できないため、このような式の値は常に破棄されます。
多くのプログラミング言語では、関数、したがって関数を含む式は副作用を持つ可能性があります。副作用を持つ式は通常、参照透過性という性質を持ちません。多くの言語(C++など)では、式をセミコロン(;)で終了して、式ステートメントに変換することができます。これにより、実装は式の副作用のみを評価し、副作用を引き起こす式ステートメント(例:または)x+1;の一部でない限り、式の結果(例:)を無視するように指示されます。y=x+1;func1(func2());
副作用の正式な概念は、実行中のプログラムの抽象的な状態の変化を指す。
副作用のもう一つの種類は、キャッシュメモリへのデータロードなど、計算システムの具体的な状態の変化です。しばしば「副作用がない」と評される言語でも、一般的にはサイドチャネル攻撃などで悪用される可能性のある具体的な副作用が存在します。
さらに、式を評価するのにかかる時間(たとえ他に明らかな副作用がない式であっても)は、システムの正しい動作に不可欠な場合があり、時間経過に伴う動作は、評価環境の外部から相互作用するシステムの他の部分によって容易に確認でき、ベンチマークテストを実行する場合など、主要な効果とみなされることもあります。
抽象的な副作用を持たない式が、その式が評価される処理環境によって実行パスから合法的に削除されるかどうかは、特定のプログラミング言語の仕様に依存する。