2014-09-01 1 views
4

Существует правило «4.5.2 Indent continuation lines at least +4 spaces» в Java Руководстве по стилю Google, который говорит:Что такое «синтаксически параллельные элементы» в Java?

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

Может кто-нибудь объяснить, что делает «синтаксически параллельные элементы» означают и привести несколько примеров для этого случая?

+0

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

+0

Я предполагаю, что это означает две вещи, которые являются одним и тем же уровнем вложенности (или приоритета) в выражении/statement. –

+0

Другими словами: 'элементы на одном синтаксическом уровне'.Пример: все утверждения (и блоки) в блоке находятся на одном уровне, уровень + 1 блока окружения. – PeterMmm

ответ

1

Руководящий принцип Google Java Style, который вы цитируете, относится к так называемому отступу продолжения , который является отступом, используемым после обертывания строки. Синтаксически параллельные элементы (потенциально) в этом случае являются выражениями, которые вы обертываете.

Пример 1 (синтаксически параллельно):

foo("bar" 
    + "baz" 
    + "boo"); 

Пример 2 (не синтаксически параллельно):

foo("bar" 
    + foo2("bar" 
     + "baz")); 

В примере 2, метод вызов foo2() вложен в вызове foo(), поэтому аргументы foo2() не совпадают с аргументами foo(), другими словами: они не являются «синтаксически параллельными».

В Google Java Style, это означает, что + "baz")); часть может отступом более 4   пространства.

Это, как говорится, я считаю, что термин «синтаксически параллельный» является творением автора этого документа; по крайней мере, я не видел, чтобы это использовалось где-то еще.

0

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

String[] elements = new String[] { "bob", 
            "joe", 
            "pete" }; 

имеет некоторый смысл (даже если он не получает отформатирован таким образом), потому что они все String элементов в том же определении массива.

Также в блоке

{ 
    System.out.println("hi"); 
    actNow(input); 
    for (int i = 0; i < j; i++) { 
     return 5; 
    } 
} 

System.out.println("hi");, actNow(input); и цикл с отступом в равной степени, потому что они все операторы в пределах одного блока. Обратите внимание: return 5; не имеет одинаковых отступов, так как это оператор в блоке цикла for. Таким образом, return 5; не является синтаксически эквивалентным другим операторам из-за его разной локальности блока.