суббота, 19 января 2019 г.

Эффективный Go: точки с запятой

Как и C, формальная грамматика Go использует точки с запятой для завершения операторов, но в отличие от C, эти точки с запятой не появляются в исходном файле. Вместо этого лексер использует простое правило для автоматической вставки точек с запятой во время сканирования, поэтому входной текст в основном не содержит их.

Правило таково. Если последний токен перед новой строкой является идентификатором (который включает в себя такие слова, как int и float64), базовый литерал, такой как число или строковая константа, или один из токенов

break continue fallthrough return ++ -- ) }

лексер всегда вставляет точку с запятой после токена. Это можно суммировать как, "если новая строка идет после токена, который может завершить оператор, введите точку с запятой".

Точка с запятой также может быть опущена непосредственно перед закрывающей скобкой, поэтому такое выражение, как

go func() { for { dst <- <-src } }()

не нуждается в точках с запятой. Идиоматичные Go программы имеют точки с запятой только в таких местах, как условия цикла for для разделения инициализатора, условия и элементы продолжения. Они также необходимы для разделения нескольких операторов в строке, если вы пишете код таким образом.

Одно из следствий правил вставки точек с запятой является то, что вы не можете поставить открывающую скобку управляющей структуры (if, for, switch, или select) в следующей строке. Если вы cделаете так, точка с запятой будет вставлена перед скобкой, что может привести к нежелательным последствия. Следует писать следующим образом:

if i < f() {
    g()
}

А не таким образом:

if i < f()  // неверно!
{           // неверно!
    g()
}


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


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

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