Выражение против утверждения - PullRequest
420 голосов
/ 21 августа 2008

Я спрашиваю относительно c #, но я полагаю, что то же самое в большинстве других языков.

Есть ли у кого-нибудь хорошее определение выражений и выражений и в чем различия?

Ответы [ 18 ]

2 голосов
/ 05 сентября 2012

Заявления -> Инструкции для последовательного выполнения
Выражения -> Оценка, которая возвращает значение

Операторы в основном похожи на шаги или инструкции в алгоритме, результатом выполнения оператора является актуализация указателя инструкции (так называемого в ассемблере)

Выражения не подразумевают и порядок выполнения с первого взгляда, их целью является оценка и возврат значения. В императивных языках программирования оценка выражения имеет порядок, но это только из-за императивной модели, но не в их сущности.

Примеры заявлений:

for
goto
return
if

(все они подразумевают перенос строки (оператора) выполнения на другую строку)

Пример выражений:

2+2

(это подразумевает не идею исполнения, а оценку)

1 голос
/ 21 июня 2015

Я не очень удовлетворен ни одним из ответов здесь. Я посмотрел на грамматику для C ++ (ISO 2008) . Однако, возможно, ради дидактики и программирования ответов может быть достаточно, чтобы различить два элемента (хотя реальность выглядит более сложной).

Оператор состоит из нуля или более выражений, но также может представлять собой другие концепции языка. Это расширенная форма Backus Naur для грамматики (отрывок для выражения):

statement:
        labeled-statement
        expression-statement <-- can be zero or more expressions
        compound-statement
        selection-statement
        iteration-statement
        jump-statement
        declaration-statement
        try-block

Мы можем видеть другие понятия, которые считаются утверждениями в C ++.

  • выражение-выражение s самоочевидно (утверждение может состоять из нуля или больше выражений, внимательно прочитайте грамматику, это сложно)
  • case например, помеченный оператор
  • оператор выбора s if if/else, case
  • оператор итерации с while, do...while, for (...)
  • оператор перехода с break, continue, return (может возвращать выражение), goto
  • объявление-заявление - это набор объявлений
  • try-block - оператор, представляющий try/catch блоков
  • и может быть еще немного грамматики

Это отрывок, показывающий часть выражений:

expression:
        assignment-expression
        expression "," assignment-expression
assignment-expression:
        conditional-expression
        logical-or-expression assignment-operator initializer-clause
        throw-expression
  • выражения являются или содержат часто присваивания
  • условное выражение (вводит в заблуждение) относится к использованию операторов (+, -, *, /, &, |, && , ||, ...)
  • throw-выражение - а? предложение throw тоже является выражением
1 голос
/ 07 мая 2013

Я предпочитаю значение statement в формально-логическом смысле этого слова. Это та, которая изменяет состояние одной или нескольких переменных в вычислении, позволяя сделать истинное или ложное утверждение об их значениях.

Я полагаю, что в вычислительном мире и науке в целом всегда будет путаница, когда вводится новая терминология или слова, существующие слова «перепрофилируются» или пользователи не знают о существующей, установленной или «правильной» терминологии того, чем они являются описывающее

1 голос
/ 17 сентября 2012

Заявление

Оператор - это процедурный строительный блок, из которого создаются все программы на C #. Оператор может объявить локальную переменную или константу, вызвать метод, создать объект или присвоить значение переменной, свойству или полю.

Серия операторов, заключенная в фигурные скобки, образует блок кода. Тело метода является одним из примеров блока кода.

bool IsPositive(int number)
{
    if (number > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Заявления в C # часто содержат выражения. Выражение в C # - это фрагмент кода, содержащий буквальное значение, простое имя или оператор и его операнды.

Выражение

Выражение - это фрагмент кода, который может быть оценен как одно значение, объект, метод или пространство имен. Двумя простейшими типами выражений являются литералы и простые имена. Литерал - это постоянное значение без имени.

int i = 5;
string s = "Hello World";

И i, и s - простые имена, идентифицирующие локальные переменные. Когда эти переменные используются в выражении, значение переменной извлекается и используется для выражения.

1 голос
/ 26 марта 2011

Заявления являются грамматически полными предложениями. Выражения нет. Например

x = 5

читается как "х получает 5". Это полное предложение. Код

(x + 5)/9.0

гласит: «х плюс 5, все делится на 9,0» Это не полное предложение. Заявление

while k < 10: 
    print k
    k += 1

это полное предложение. Обратите внимание, что заголовок цикла не является; «в то время как k <10» является подчиненным предложением. </p>

0 голосов
/ 17 августа 2015

Чтобы улучшить и подтвердить мой предыдущий ответ, определения терминов языка программирования должны быть объяснены из теории типов компьютерных наук, когда это применимо.

Выражение имеет тип, отличный от типа Bottom, то есть имеет значение. Оператор имеет тип Unit или Bottom.

Из этого следует, что оператор может иметь какой-либо эффект в программе только тогда, когда он создает побочный эффект, поскольку он либо не может вернуть значение, либо возвращает только значение типа Unit, которое либо не присваивается некоторые языки, такие как C * void) или (например, в Scala), могут быть сохранены для отложенной оценки оператора.

Очевидно, что @pragma или /*comment*/ не имеют типа и поэтому отличаются от операторов. Таким образом, единственным типом заявления, которое не будет иметь побочных эффектов, будет неоперация. Неоперация полезна только в качестве заполнителя для будущих побочных эффектов. Любое другое действие из-за заявления будет побочным эффектом. Снова подсказка компилятора, например @pragma, не является оператором, потому что у него нет типа.

0 голосов
/ 08 сентября 2014

Вот краткое изложение одного из самых простых ответов, которые я нашел.

первоначально ответили Андерс Касеорг

Оператор - это полная строка кода, которая выполняет какое-то действие, а выражение - это любой раздел кода, который оценивает значение.

Выражения могут быть объединены «по горизонтали» в более крупные выражения с использованием операторов, тогда как выражения могут быть объединены «по вертикали» только путем написания одного за другим или с блочными конструкциями. Каждое выражение может использоваться в качестве оператора (результатом которого является оценка выражения и игнорирование полученного значения), но большинство операторов не могут использоваться в качестве выражений.

http://www.quora.com/Python-programming-language-1/Whats-the-difference-between-a-statement-and-an-expression-in-Python

0 голосов
/ 09 декабря 2011

Точнее говоря, оператор должен иметь "побочный эффект" (то есть должен быть обязательным ), а выражение должно иметь a значение тип (т.е. не нижний тип).

Тип оператора является типом единицы, но из-за теоремы Холтинга единица является фикцией, поэтому скажем, нижний тип .


Void не совсем нижний тип (это не подтип всех возможных типов). Существует в языках, которые не имеют полностью звуковой системы типов . Это может звучать как снобистское утверждение, но полнота , такая как аннотации отклонений , имеют решающее значение для написания расширяемого программного обеспечения.

Давайте посмотрим, что Википедия может сказать по этому вопросу.

https://en.wikipedia.org/wiki/Statement_(computer_science)

В компьютерном программировании оператор - это наименьший отдельный элемент императивного языка программирования, который выражает некоторое действие , которое должно быть выполнено.

Многие языки (например, C) различают операторы и определения, причем оператор содержит только исполняемый код и определение, объявляющее идентификатор, тогда как выражение оценивается только как значение.

...