Из трех языковых тегов, которые вы выбрали, я только очень знаком с Python, но я считаю, что многие другие языки имеют схожие взгляды на эти понятия. Весь код примера здесь Python.
A заявление - это вещь, которая выполнена; «инструкция сделать что-то», что понимает реализация языка. например
print "Hello World"
pass
def foo(n):
return n + 1
if condition:
print 'yay'
else:
print 'doh'
Вышеупомянутый блок содержит инструкцию печати, инструкцию pass, инструкцию определения функции и инструкцию if/else. Обратите внимание, что определение функции и оператор if/else являются составными операторами; они содержат другие утверждения (возможно, многие из них и, возможно, другие составные утверждения).
выражение - это то, что можно оценить для получения значения. например
1
"foo"
2 * 6
function(argument)
None
выше содержит числовое выражение буквального, буквального строковое выражение, выражение с участием операторов, числовые выражения вызова функции, а выражение буквального None. Помимо литералов и переменных, выражения состоят из других выражений. В function(argument)
, function
и argument
также оба выражения.
Главное отличие состоит в том, что инструкции - это инструкции, которые говорят, что реализация языка «должна сделать что-то». Выражения оцениваются до значения (что, возможно, требует, чтобы языковая реализация «пошла на что-то»).
Следствием этого является то, что везде, где вы видите значение (включая выражение), вы можете заменить любое другое выражение, и вы все равно получите что-то, что делает какой-то смысл. Он может не скомпилировать или исключить исключения во время выполнения или что-то еще, но по крайней мере на каком-то уровне вы можете понять, что происходит.
Заявление может никогда появляются внутри выражения (я считаю, что это не так в Руби и JavaScript, в каком-то смысле, так как они позволяют буквенные кодовые блоки и функции, которые затем используются в качестве значения в целом и функции и блоки кода содержат инструкции, но это отчасти отличается от того, о чем я говорю). Выражение должно иметь значение (даже если оно неинтересное, например, None
). Инструкция - это команда; для него не имеет смысла отображаться как часть выражения, потому что оно не имеет ценности.
Многие языки также позволяют использовать выражения как утверждения. Обычный смысл этого - «оценить это выражение, чтобы получить значение, а затем выбросить его». В Python, функции, которые всегда возвращают None
обычно используются таким образом:
write_to_disk(result)
Он используется как «команда», так это выглядит, как утверждение, но технически это выражение, мы просто не использовать значение он оценивает что угодно. Вы можете утверждать, что «голое выражение» является одним из возможных утверждений на языке (и они часто разбираются таким образом).
Некоторые языки хотя и различают функции, которые должны использоваться как операторы без возвращаемого значения (часто называемые процедурами) и функции, которые используются как выражение, и дают вам ошибки или предупреждения для использования функции, такой как оператор, и определенно вы получите ошибку для использования процедуры в качестве выражения.
Итак, если foo
является выражением, я могу написать 1 + foo
, и хотя это может привести к ошибке типа, это, по крайней мере, имеет такое значение. Если foo
является оператором, то 1 + foo
обычно является ошибкой разбора; реализация языка даже не сможет понять, что вы пытаетесь сказать.
функция с другой стороны, это вещь, которую вы можете позвонить. На самом деле это не выражение или утверждение само по себе. В Python для создания функции используется оператор def
, а вызов функции - выражение. Имя, связанное с функцией после ее создания, также является выражением. Но сама функция является значением , что не является выражением, когда вы получаете техническую информацию, но, безусловно, не является утверждением.
Итак, для петель. Это цикл в Python:
for thing in collection:
do_stuff(thing)
Похож оператором (составной оператор, как если заявление). И чтобы доказать это, это совершенно бессмысленно (и ошибка синтаксического анализа):
1 + for thing in collection:
do_stuff(thing)
В некоторых языках, хотя, эквивалент для цикла является выражение, и имеет значение, к которому вы можете попытаться добавить 1. В некоторых это даже функция, а не специальный синтаксис, испеченный на языке.
Это действительно зависит от вашего языка. Что это такое, Ruby, Python или Javascript? – deceze
Хороший вопрос - это показывает, что вы сделали свое исследование, которое огромно. – Purag
@deceze - это не все заявления на этих трех языках? –