Стандарт Кодирования Java / лучшие практики - соглашение о присвоении имен для повреждает/продолжает маркировки

Экземпляр внутреннего класса создается, когда создается экземпляр внешнего класса. Поэтому члены и методы внутреннего класса имеют доступ к членам и методам экземпляра (объекта) внешнего класса. Когда экземпляр внешнего класса выходит за пределы области видимости, также исчезают внутренние экземпляры классов.

Статический вложенный класс не имеет конкретного экземпляра. Он просто загружается, когда он используется в первый раз (как и статические методы). Это полностью независимая сущность, методы и переменные которой не имеют доступа к экземплярам внешнего класса.

Статические вложенные классы не связаны с внешним объектом, они быстрее, и они не 't взять память кучи / стека, потому что не нужно создавать экземпляр такого класса. Поэтому эмпирическое правило состоит в том, чтобы попытаться определить статический вложенный класс с максимально возможной областью (private> = class> = protected> = public), а затем преобразовать его во внутренний класс (удалив «статический» идентификатор) и ослабить объем, если это действительно необходимо.

20
задан Ciro Santilli 新疆改造中心法轮功六四事件 17 March 2015 в 10:50
поделиться

10 ответов

Если необходимо использовать их, используют капиталы, это привлекает внимание им и одиночным играм их из того, чтобы быть по ошибке интерпретируемым как имена "Класса". Привлечение внимания к ним обладает дополнительным преимуществом привлечения чьего-то внимания, которое придет и осуществит рефакторинг Ваш код и удалит их. ;)

16
ответ дан 29 November 2019 в 22:35
поделиться

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

outer_loop:
for (...) {
  //  some code
  for (...) {
    //  some code
    if (...)
      continue outer_loop;
    //  more code
  }
  //  more code
}

Да, случаи как это действительно происходят все время. Что люди предлагают, чтобы я использовал вместо этого? Булево условие как это?

for (...) {
  //  some code
  boolean continueOuterLoop = false;
  for (...) {
    //  some code
    if (...) {
      continueOuterLoop = true;
      break;
    }
    //  more code
  }
  if (continueOuterLoop)
    continue;
  //  more code
}

Фу! Рефакторинг его, поскольку метод не облегчает это также:

boolean innerLoop (...) {
  for (...) {
    //  some code
    if (...) {
      return true;
    }
    //  more code
  }
  return false;
}

for (...) {
  //  some code
  if (innerLoop(...))
    continue;
  //  more code
}

Уверенный это немного более симпатично, но это все еще раздает лишнюю булевскую переменную. И если внутренний цикл изменил локальные переменные, осуществление рефакторинг его в метод является не всегда правильным решением.

Итак, почему Вы все против маркировок? Приведите мне некоторые веские причины и практические альтернативы для вышеупомянутого случая.

35
ответ дан 29 November 2019 в 22:35
поделиться

Конвенция состоит в том, чтобы избежать маркировок в целом.

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

for ( ;/*stuff*/; ) 
{
    lotsOfCode();

    if ( !isEnough() )
    {
        moreCode();
    }
}
<час>

Редактирование: видевший фактический рассматриваемый код ( здесь ), я думаю, что использование маркировок является, вероятно, лучшим способом сделать код читаемым. В большинстве случаев использование маркировок является неправильным подходом в этом экземпляре, я думаю, что это прекрасно.

14
ответ дан 29 November 2019 в 22:35
поделиться

Стиль кода Java Sun, кажется, предпочитает называть маркировки таким же образом как переменные, означая Camel-регистр с первой буквой в нижнем регистре.

8
ответ дан 29 November 2019 в 22:35
поделиться

Поскольку маркировки так редко полезны, это появляется, что нет никакой четкой конвенции. Спецификация языка Java имеет один пример с маркировками, и они находятся в non_cap.

, Но так как они так редки, по-моему, это является лучшим, для размышления дважды, являются ли они действительно правильным инструментом.

И если они - правильный инструмент, сделайте их всеми заглавными буквами так, чтобы другие разработчики (или Вы позже) поняли их как что-то необычное сразу же. (как Craig уже указал)

1
ответ дан 29 November 2019 в 22:35
поделиться

пример кода wrt sadie's :

Вы дали

outerloop:
for (...) {
  //  some code
  for (...) {
    //  some code
    if (...)
      continue outerloop;
    //  more code
  }
  //  more code
}

Как пример. Вы делаете правильное замечание. Мое лучшее предположение было бы:

public void lookMumNoLabels() {
  for (...) {
    // some code
    doMoreInnerCodeLogic(...);
  }
}

private void doMoreInnerCodeLogic(...) {
   for (...) {
      // some code
      if (...) return;
   }
}

, Но были бы примеры, где такой рефакторинг не находится правильно с любой логикой, Вы делаете.

1
ответ дан 29 November 2019 в 22:35
поделиться

Конвенция, которую я больше всего видел, является просто Camel-регистром, как имя метода...

myLabel:

, но я также видел маркировки, снабженные префиксом подчеркивание

_myLabel:

или лабораторию...

labSomething:

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

2
ответ дан 29 November 2019 в 22:35
поделиться

Практика convetion/best не должна была бы все еще использовать их вообще и осуществлять рефакторинг код так, чтобы было больше читаемого извлечения использования как метод.

0
ответ дан 29 November 2019 в 22:35
поделиться

Они - вид goto Java - не уверенный, если C# имеет их. Я никогда не использовал их на практике, я не могу думать о случае, где предотвращение их не привело бы к намного большему количеству читаемого кода.

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

0
ответ дан 29 November 2019 в 22:35
поделиться

я знаю, я не должен использовать маркировки.

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

мес, Ваша предпосылка является неправильной. Вопрос не должен быть, 'как я форматирую их?'

Ваш вопрос должен быть, 'У меня есть код, который имеет большую сумму логики в циклах - как я делаю это более читаемым?'

ответ на тот вопрос должен переместить код в человека, хорошо названные функции. Затем Вы не должны маркировать повреждения вообще.

0
ответ дан 29 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: