Chained Control Flow Statements: break [, break]... [,continue]
От: Caracrist https://1pwd.org/
Дата: 15.09.24 19:07
Оценка: +1 -2 :)
Концепция заключается в том, чтобы разрешить использование нескольких операторов `break` и опционального оператора `continue` в одной строке, как показано ниже:

while (cond1) // возврат сюда из: break, continue
{
    while (cond2)
    {
        if (cond3)
        {
            break, break; // выход из внутреннего и внешнего цикла
        }
        else if (cond4)
        {
            break, continue; // выход из внутреннего цикла и продолжение во внешнем цикле
        }
    }
    // этот код выполняется только если !cond2
}
// код выполнен после "break, break" или если !cond1


while (cond1) // возврат сюда из: break, continue
{
    switch (item)
    {
        case value1:
            break, break; // выход из switch и внешнего цикла
        case value2:
            break, continue; // выход из switch и продолжение во внешнем цикле
        default:
            break;
    }
    // этот код выполняется только если был default
}
// код выполнен после "break, break" или если !cond1


Операторы `break` могут завершать выполнение циклов или блоков `switch case`. Количество операторов `break` ограничено количеством вложенных областей, из которых можно выйти, тогда как оператор `continue` может быть только один и должен быть последним в последовательности.

Формальное определение (subj):

break [, break]... [, continue]


Это означает, что внутри блока кода могут использоваться несколько операторов `break` и опционально `continue` в конце. Ни один из них не обязателен, что обеспечивает полную обратную совместимость.

Обычно альтернативы этому подходу включают управление несколькими флагами, подобное конечному автомату, распределённому между локальными переменными, а также множество операторов `if`, чтобы обработать условия в нужном месте. Это может усложнить как код, так и его читаемость.

Кроме того, поскольку каждый оператор (`break`, `continue`) является отдельным словом, они могут подсвечиваться в IDE, показывая свою связь с соответствующим блоком (`for`, `foreach`, `while`, `switch`, `do`). Во время отладки эти операторы могут выполняться по одному, подобно тому, как выполняется код внутри `for (statements)`, с независимой подсветкой каждой части строки.

Если вам знакома эта боль, приглашаю поддержать на: https://github.com/dotnet/csharplang/discussions/8434 (стрелкой вверх)
~~~~~
~lol~~
~~~ Single Password Solution
Re: Chained Control Flow Statements: break [, break]... [,continue]
От: m2user  
Дата: 15.09.24 23:42
Оценка: +4
labeled loops в Java — лучше.
Re: Chained Control Flow Statements: break [, break]... [,continue]
От: Privalov  
Дата: 16.09.24 06:59
Оценка:
Здравствуйте, Caracrist, Вы писали:

Тот случай, когда goto приносит реальную пользу.
Re[2]: Chained Control Flow Statements: break [, break]... [,continue]
От: Darky Darkov Россия  
Дата: 16.09.24 08:45
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Caracrist, Вы писали:


P>Тот случай, когда goto приносит реальную пользу.


так в си-шарпе можно также!
Re: Chained Control Flow Statements: break [, break]... [,continue]
От: Baiker  
Дата: 11.01.25 03:07
Оценка: 5 (1)
Здравствуйте, Caracrist, Вы писали:

C> Концепция заключается в том, чтобы разрешить использование нескольких операторов `break` и опционального оператора `continue` в одной строке, как показано ниже:

C> break, break; // выход из внутреннего и внешнего цикла

Выглядит оригинально, но непрактично. Когда начнутся модификации кода, меньше всего прогеру хочется рефакторить всю эту ересь.
Уже давно придуманы (в языке D ) break LABEL и continue LABEL. Работают безотказно.
Re[2]: Chained Control Flow Statements: break [, break]... [,continue]
От: _NN_ www.nemerleweb.com
Дата: 13.01.25 20:09
Оценка: +2
Здравствуйте, m2user, Вы писали:

M>labeled loops в Java — лучше.

А ещё лучше именнованые блоки Nemerle.

Вроде как давно не упоминался всуе.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Chained Control Flow Statements: break [, break]... [,co
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.01.25 13:56
Оценка: -1
Здравствуйте, Caracrist, Вы писали:

C>Концепция заключается в том, чтобы разрешить использование нескольких операторов `break` и опционального оператора `continue` в одной строке, как показано ниже:


Освой концевую рекурсию и проблем с циклами у тебя не будет в любом языке где поддерживается её оптимизация (или если количество переборов циклах не велико и не может переполнить стек).
if (cond1)
    outerLoop();

// код выполнен после "break, break" или если !cond1
return;

void outerLoop()
{
   if (innerLoop() && cond1)
       outerLoop(); // концевая рекурсия внешнего цикла (возврат сюда из: break, continue)
   
    bool innerLoop()
    {
        if (cond3)
            return false; // выход из внутреннего и внешнего цикла
        else if (cond4)
            return true; // выход из внутреннего цикла и продолжение во внешнем цикле
        
        if (cond2)
            return innerLoop(cond2); // концевая рекурсия вложенного цикла

        // этот код выполняется только если !cond2
        return true;
    }
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 14.01.2025 15:07 VladD2 . Предыдущая версия . Еще …
Отредактировано 14.01.2025 14:00 VladD2 . Предыдущая версия .
Отредактировано 14.01.2025 13:57 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.