четверг, 13 июня 2019 г.

Спецификация Go: утверждения (statements), завершающие утверждения (terminating statements)

Утверждения (statements) контролируют исполнение.

Statement =
  Declaration | LabeledStmt | SimpleStmt |
  GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt |
  FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt |
  DeferStmt .

SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .

Завершающие утверждения (terminating statements)

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

  1. "return" или "goto" утверждение
  2. Вызов встроенной функции panic.
  3. Блок, в котором список утверждений заканчивается завершающим утверждением.
  4. "if" утверждение, в котором:

    • ветка "else" присутствует, и
    • обе ветви являются завершающими утверждениями.
  5. Утверждение "for", в котором:

    • нет утверждений "break", ссылающихся на утверждение "for", и
    • условие цикла отсутствует.
  6. Утверждение "switch", в котором:

    • нет утверждений "break", ссылающихся на утверждение "switch",
    • присуствует случай по умолчанию (default case), и
    • список утверждений в каждом случае (case), включая значение по умолчанию (default case), оканчиваются завершающим утверждением или, возможно, помечены как "выпадающее" утверждение.
  7. Утверждение "select", в котором:

    • нет утверждений "break", ссылающихся на утверждение "select", и
    • список утверждений в каждом случае (case), включая значение по умолчанию (default case), если оно присутствует, заканчиваются завершающим утверждением.
  8. Помеченное утверждение (labeled statement), помечающее завершающее утверждение.

Все остальные утверждения не являются завершающими.

Список утверждений заканчивается завершающим утверждением, если список не пустой и его последнее непустое утверждение является завершающим.

Пустые утверждения

Пустое утверждение ничего не делает.

EmptyStmt = .

Помеченные утверждения (Labeled statements)

Помеченное утверждение может быть целью утверждения goto, break или continue.

LabeledStmt = Label ":" Statement .
Label       = identifier .

Пример:

Error: log.Panic("error encountered")
// в данном случае Error является меткой (label)


Читайте также:


Комментариев нет:

Отправить комментарий