для каждого повреждения …

Для меня в настоящее время определяют задачу с очисткой данных из общедоступного сайта (да, я знаю). К счастью это соответствует xhtml, таким образом, я в состоянии использовать xslt для сбора данных, в которых я нуждаюсь. Получающееся решение является читаемым, чистым и легким измениться, если потребность происходит. Прекрасный!

11
задан ChronoFish 11 December 2009 в 17:15
поделиться

14 ответов

I use a break. It's a perfectly cromulent solution.

27
ответ дан 3 December 2019 в 01:00
поделиться

Видите ли, перерыв меня совершенно не беспокоит . Программирование построено на goto, а for-break, как и все управляющие структуры, является просто специальной формой goto , предназначенной для улучшения читаемости вашего кода. Никогда не расстраивайтесь по поводу написания читаемого кода!

Теперь я действительно чувствую себя грязным из-за прямых сравнений с true , особенно при использовании оператор равенства преобразования типов ... Ах да. То, что вы написали - if (object.test == true) - эквивалентно написанию if (object.test) , но требует дополнительных размышлений. Если вы действительно хотите, чтобы это сравнение было успешным, только если object.test имеет логическое значение и истина ,

4
ответ дан 3 December 2019 в 01:00
поделиться

My preference is to simply use a break. It's quick and typically doesn't complicate things.

If you use a for, while, or do while loop, you can use a variable to determine whether or not to continue:

for ($i = 0, $c = true; ($i < 10) && $c; $i++) {
    // do stuff

    if ($condition) {
        $c= false;
    }
}

The only way to break from a foreach loop is to break or return.

0
ответ дан 3 December 2019 в 01:00
поделиться

Используйте

Object object;
int index = 0;

do
{
    object = objectList[index];
    index++;
}
while (object.test == false)

, если выход из цикла for вызывает у вас беспокойство.

0
ответ дан 3 December 2019 в 01:00
поделиться

I really don't see anythign wrong with breaking out of a for loop. Unless you have some sort of hash table, dictionary where you have some sort of key to obtain a value there really is no other way.

1
ответ дан 3 December 2019 в 01:00
поделиться

I'd use a break statement.

1
ответ дан 3 December 2019 в 01:00
поделиться

I think is is easier to read and hence easier to maintain.

2
ответ дан 3 December 2019 в 01:00
поделиться

Perhaps I'm misunderstanding your use-case, but why break at all? I'm assuming you're expecting the test to be true for at most one element in the list?

If there's no performance issue and you want to clean up the code you could always skip the test and the break.

for (object in objectList)
{
  //do some process on object
}

That way if you do need to do the process on more than one element your code won't break (pun intended).

0
ответ дан 3 December 2019 в 01:00
поделиться

Like you said ""why not?" It's quick and more importantly easy to understand and follow."

Why feel dirty, I see nothing wrong with this.

2
ответ дан 3 December 2019 в 01:00
поделиться

For small lists, there's no issue with doing this. As you mention, you may want to think about a more 'elegant' solution for large lists (especially lists with unknown sizes).

Sometimes it feels wrong, but it's all right. You'll learn to love break in time.

2
ответ дан 3 December 2019 в 01:00
поделиться

It's quick and more importantly easy to understand and follow.

Don't feel bad about break. Goto is frowned upon because it's quick and more importantly not easy to understand and follow.

5
ответ дан 3 December 2019 в 01:00
поделиться

Разрывы и продолжения не являются переходами. Они здесь не просто так. Как только вы закончите с циклической структурой, выйдите из цикла .

Теперь я бы избегал очень-очень глубокого вложения (он же антипаттерн со стрелкой).

if (someCondition)
{
    for (thing in collection)
    {
        if (someOtherCondition)
        {
            break;
        }
    }
}

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

if (someCondition)
{
    loopThroughCollection(collection);
}

function loopThroughCollection(collection)
{
    for (thing in collection)
    {
        if (someOtherCondition)
        {
            doSomethingToObject(thing);
            break;
        }
    }
}

function doSomethingToObject(thing)
{
    // etc.
}
2
ответ дан 3 December 2019 в 01:00
поделиться

It is meant to be like it. Break is designed to jump out of a loop. If you have found what you need in a loop why keep the loop going?

2
ответ дан 3 December 2019 в 01:00
поделиться

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

Вы можете легко извлечь поиск в функцию многократного использования:

function findFirst(objectList, test)
{
  for (var key in objectList) {
    var value = objectList[key];
    if (test(value)) return value;
  }
  return null;
}

var first = findFirst(objectList, function(object) {
  return object.test == true;
}
if (first) {
  //do some process on object
}

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

function processFirstMatch(objectList, test, processor) {
  var first = findFirst(objectList, test);
  if (first) processor(first);
}

processFirst(
  objectList,
  function(object) {
    return object.test == true;
  },
  function(object) {
    //do some process on object
  }
}

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

1
ответ дан 3 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

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