Предложение по дополнению оператора For

Здравствуйте.

Сталкиваюсь с ситуациями когда несколько вложенных циклов и чтобы досрочно прекратить цикл на несколько уровней вверх необходимо создавать дополнительные переменные-флаги и по ним выходить из циклов по очереди через break/continue.

Я бы не отказался видеть команду break/continue дополненной переменной цикла по которой надо выйти из цикла

пример:

For var i:=0 to 10 do
begin
For var k:=0 to 10 do

begin

break i;

end;

end;

Что думаете?

Инструкцию goto забанили.

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

1 лайк

А зря и жаль. Было бы более ясно и понятно, чем медленное выкарабкивание из вложенных циклов.

1 лайк

Мне тоже жаль. Но что делать? Одна надежда, что время все поставит на свои места. Как ни странно, уже почти с десяток подобных предложений был вначале отвергнут, но позднее все же реализован в том или ином виде. Тут, скорее всего, работает принцип, что идея должна вначале “вылежаться” ))

Как говорят Уральские пельмени, идея хорошая, но здесь ей не место.

Тогда уж лучше break break; или break(2) :slightly_smiling_face:

1 лайк

Лучше лучше, чем никак. :grinning:

А в тройном цикле break(3)? В принципе да, лучше, потому что позволит покидать и циклы других видов: loop, while, until, foreach.

1 лайк

да, я тоже предлагал в таком виде

1 лайк

А по имени переменной цикла?

Не во всех типах циклов есть переменная цикла. Лучше универсальный подход.

2 лайка

Ну, loopы вряд ли будут вкладывать.

зачем заведомо вставлять ограничение, если можно обойтись без него

3 лайка

Разве не понравилось? Мне казалось они подумали и забыли. Надо было в issue чтобы не получилось забыть…

loop n1 do
begin
  
  for var i := 1 to n2 do
  begin
    if cond then
      continue(2)
  end;
  
end;

Если по имени переменной цикла - это никак не реализовать.

Ну и loop это не единственный цикл без переменной цикла - while и until тоже попадают.

1 лайк

Добрый день всем коллегам. У меня тут другое мнение. Лучше пользоваться операторными скобками Begin … End, чем оператора goto. В случае оператора goto, если переменная определено в после For, то потом как будеть, в память остается? Примеры с операторными скобками Begin … End:

  1. Если выйти из первого цикла:

For Var h:=1 to 20 do Begin For Var j:=1 to 12 do PrintLn(h,j); break end

  1. Если выйти из второго цикла:

For Var h:=1 to 20 do For Var j:=1 to 12 do Begin PrintLn(h,j); break end

Для других видов оператора цикла тоже такие примеры.

Используйте синтаксис из Markdown для выделения кода:

```
код
```

Выглядит как:

код

И перечитывайте сообщение перед тем как отправлять - вас очень сложно понять в нескольких местах… “если переменная определено в после For”

По делу - из того что я всё же понял - у вас в первой программе break не выполняется во вложенном цикле. Оно описано вне него.

What about integrating new syntax improvements from Modula-2 and Modula-3? You can get rid of a lot of begin and end. Btw, there is a Russian guy working as contributor on CM3 project on Github.

1 лайк

This is a question for the developers. I am not a developer, sorry