Названные блоки для ограничения переменного объема: хорошая идея?

вы можете использовать

$ar = (array) $get_user;

, тогда вы можете получить доступ к их индексам:

echo $ar[0];
46
задан David Leppik 15 October 2008 в 22:24
поделиться

11 ответов

Я просто пошел бы прямо для рефакторинга в меньшие методы. Если метод является достаточно большим, что ему нужно разбивание как это, ему действительно нужно разбивание в несколько методов если во всем возможный.

При ограничении объема хорошо, это не действительно, для чего именованные блоки. Это неидиоматично, который является очень редко хорошей вещью.

26
ответ дан Jon Skeet 8 November 2019 в 00:17
поделиться

Если это было плохо, то, почему это функция на языке! Это имеет цель, и Вы нашли его.

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

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

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

нет никаких жестких правил. Я немного иногда устаю от коллег, которые чрезмерно поместили все в его собственный метод или класс или файл, и это становится кошмаром для навигации. Где-нибудь существует хороший баланс!

14
ответ дан Scott Langham 8 November 2019 в 00:17
поделиться

Используя блоки для ограничения объема хорошая техника в моей книге.

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

9
ответ дан 8 November 2019 в 00:17
поделиться

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

final String example;
{
   final StringBuilder sb = new StringBuilder();
   for(int i = 0; i < 100; i++)
     sb.append(i);
   example = sb.toString();

}

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

10
ответ дан John Nilsson 8 November 2019 в 00:17
поделиться

Это - 1-й раз, когда я вижу, что кто-то еще использует блоки. гмм! Я думал, что был единственным. Я знаю, что не изобрел его - не забыл читать его где-нибудь - возможно от моего предыдущего мира C++.

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

я не соглашаюсь со всеми парнями, которые просят, чтобы Вы извлекли его в метод. Большинством вещей, которые мы надеваем в таких блоках, не являются действительно допускающие повторное использование блоки. Это имеет смысл в большой инициализации И ДА, я использовал блоки для предотвращения СКОПИРОВАТЬ/ВСТАВИТЬ ошибок.

BR,
~A

5
ответ дан anjanb 8 November 2019 в 00:17
поделиться

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

  1. Вы не будете в состоянии использовать временные переменные, объявленные в новом методе
  2. , GC и JIT-компилятор подберут ту же информацию при помощи нового метода
  3. Используя описательное имя для нового метода (использующий "частную Дату initNextTuesday ()" в Вашем случае), будет допускать сам комментирующий преимущество кода
  4. Никакая потребность осуществить рефакторинг код, когда Вы уже "предварительно учли" его

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

2
ответ дан Haphazard 8 November 2019 в 00:17
поделиться

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

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

3
ответ дан matt b 8 November 2019 в 00:17
поделиться

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

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

1
ответ дан Allain Lalonde 8 November 2019 в 00:17
поделиться

Я сделал это в некоторых моих c#. Я не знал, что Вы могли назвать блоки, хотя, я должен буду попробовать, которые видят, работает ли это в c# также.

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

Что касается недостатка вложения их, я рассматриваю что как большее количество отказа программиста не самих блоков объема.

0
ответ дан Jeremy 8 November 2019 в 00:17
поделиться

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

0
ответ дан johnstok 8 November 2019 в 00:17
поделиться

Я использовал бы блок с комментарием, довольно добавляющим маркировку там.

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

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

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

2
ответ дан Will Sargent 8 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

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