Давайте go вернемся к истокам. При просмотре файла кода (и пропуске любого раздела заголовка или комментариев для этой цели) имеется несколько уровней структуры.
На внешнем уровне у нас есть блоки . Это участки кода в фигурных скобках (символы {
и }
). У вас также могут быть неявные блоки с одним оператором.
Внутри блоков у нас есть операторы . Это те вещи, которые обычно заканчиваются точкой с запятой (;
), но могут также включать управляющие операторы / заголовки блоков, такие как if
, while
, return
, et c . Думайте об утверждении как о полной «строке» кода, даже если иногда оператор может охватывать несколько строк текста в файле или даже несколько операторов в одной строке текста.
Мы можем удалить другой слой и загляните внутрь заявлений. Здесь находим выражения . Выражение - это часть оператора, которая может быть оценена. Например, возьмите эту строку:
a = b + (c - d);`
Здесь мы можем сказать, что c - d
- это выражение. Мы также можем сказать, что b
само по себе является выражением. Но b +
не является полным выражением, потому что оператор +
неполный. Также нет b + (c
, потому что мы разорвали круглые скобки.
Есть несколько различных типов выражений:
- Условное - где два элемента Сравнено (
a == b
, a > b
, et c) - Значение - Выражения, которые приводят к некоторому значению (
a + b
) - Пусто - Выражения, в которых результат пуст, например, вызов метода void (
a()
).
Вот в чем дело: я солгал. Условные выражения на самом деле не существуют как отдельная категория. Все условные выражения на самом деле являются выражениями значений, где рассматриваемое значение результата является логическим. Все, что на самом деле касается if()
, while()
, et c, получает логическое выражение. Следовательно, каждый раз, когда вы видите код в следующих строках:
if (a == b)
, вы можете переписать его так:
bool c = (a == b);
if (c)
Потому что c
по-прежнему является логическим выражением само по себе . a == b
на самом деле просто выражение с логическим результатом, и вы можете поместить любое логическое выражение на его место.
Для полноты мне нужно упомянуть присваивание . Некоторые языки рассматривают присваивание как недействительные выражения. Другие рассматривают присвоение как выражение значения, где результатом является значение, которое было присвоено (C# делает это). Небольшое число обрабатывает присвоение как выражение значения, где результатом является логическое значение true
, если присвоение выполнено успешно, и false
в противном случае.