Posted on :: Source Code::

Термины

Важно помнить смысл этих терминов и уметь понимать, что мы к каждому из них относим. Обоснование этому будет приведено дальше по тексту.

Языковая конструкция

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

Expression (выражение)

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

Результатом вычисления expression всегда является объект.

Примеры побочных эффектов:

  1. Вывод текста в консоль
  2. Отправление данных по сети
  3. Чтение или запись в файл
  4. Изменение некоторого объекта (например, изменение списка)

Statement (инструкция)

Это общее название для группы языковых конструкций (они далее перечисляются). Для любой из них корректно говорить, что она является языковой конструкцией statement.

Примечательно в statement то, что вся программа на Python состоит из последовательности таких конструкций. Для разделения элементов последовательности обычно достаточно использовать перенос строки (однако, например, некоторые statement могут занимать сразу несколько строк).

Возьмём какую-то программу на Python.

a = 1

["Hello"]

def test():
    pass

Справедливо будет сказать что, интерпретатор в определённый момент видит этот текст вот так:

statement_1 разделитель statement_2 разделитель statement_3

И последовательно выполняет эти statement. Под выполнением statement понимается вполнение каких-то конкретных действий, заложенный в смысл statement. Далее для некоторых видов statement расписано, что именно при их выполнении делает интерпретатор.

Assignment statement (инструкция присваивания)

Имеет вид "name = expression".

Смысл конструкции:

  1. Вычислить expression
  2. Cвязать результат вычисления с именем name.

Expression statement (инструкция-выражение)

Имеет вид "expression".

Смысл конструкции:

  1. Вычислить выражение expression (и всё).

Например вот в таком коде

a = [1]
[a]

У нас есть:

  • два statement: assignment statement и expression statement
  • два expression: первое является частью assignment statement, второе является expression statement.

Получается, что на второй строчке у нас написан текст [a], который является одновременно и expression и expression statement. На самом деле это означает простую вещь: к этому куску текста относится сразу два смысла:

  1. Интерпретатор Python при проходе по программе выполняет этот кусок текста (смысл который мы тянем от expression statement)
  2. Этот кусок текста вычисляется, в результате чего мы получаем объект. И в ходе вычисления могут возникнуть побочные эффекты. (смысл, который мы тянем от expression)

Зачем учить все эти термины

Благодаря тому, что мы теперь знаем, что языковая конструкция expression используется в двух местах, мы получаем возможность объяснять вроде-бы разные куски кода одинаково. Например:

print("Hello")
a = 1

Теперь в ходе объяснения поведения и первой и второй строчки этого кода мы используем один и тот же термин: expression. Под ним мы понимаем языковую конструкцию, которая характеризуется свойствами, описанными выше (возвращает значение, может вызвать побочный эффект). Эта одна идея применима сразу и к print("Hello") на первой строчке и к 1 на второй.

Нам теперь не нужно для первой строки вспомнинать одно объяснение, а для другой строки другое. Хорошо зная, что такое expression, мы можем дать корректное объяснение того что происходит и там и там. Тот же принцип относится и к другим конструкциям, которые мы рассмотрели.

Польза такого подхода в дальнейшем будет становиться всё больше и больше. Например, expression используются далеко не только в двух видах statement: они используются в Python повсеместно.

Та же логика относится и к тому, почему мы учили как меняется состояние Python через рисунки. Вместо того, чтобы запоминать, как ведёт себя код в огромном количестве ситуаций, можно выучить логику по которой работает состояние на картинке, и научиться применять эту логику в коде.

Задание

Дан текст исходного кода. Выпишите части текста, к которым:

  1. Можно применить термин "языковая конструкция"
  2. Можно применить термин "Expression"
  3. Можно применить термин "Statement"
  4. Можно применить термин "Assignment statement"
  5. Можно применить термин "Expression statement"

(к каждому пункту выпишите все части текста к которому термин можно применять)

Тексты исходного кода:

a = 1
b = 100
a = 1
b = []
b.append(a)
print("Hello world")
print(str("Hello world"))
a = print()
Table of Contents